asyncio异步编程,你搞懂了吗?

基于async & await关键字的协程实现异步编程,这是Python异步编程的主流技术。接下来将详细讲解asyncio模块与async&await的关键概念。事件循环是异步编程的核心,它是一个while循环,周期性地运行并执行任务。通过事件循环可以获取和创建任务。编写程序时,可以通过代码获取并创建事件循环。协程函数定义形式为...
asyncio异步编程,你搞懂了吗?
协程与异步编程(asyncio)是一种通过一个线程实现代码块相互切换执行的技术。这与普通的函数执行顺序不同,协程允许在多个上下文中切换执行代码,从而实现更高效的程序运行。以下是协程的实现方式:

1.1 greenlet

greenlet是一个第三方模块,使用前需安装pip3 install greenlet。greenlet提供了协程的实现方式,允许在多个协程间切换执行。

1.2 yield

基于Python的生成器的yield和yield form关键字实现协程,其中yield form在Python3.3中引入,提供了一种简洁的方式来实现协程。

1.3 asyncio

Python3.4引入官方协程库asyncio,它是基于greenlet的更高级的实现,内部集成了遇到IO耗时操作自动切花的功能,提升了程序的执行效率。

1.4 async & awit

在Python3.5中,async与await关键字正式引入,简化了协程代码的编写,让程序更加易于理解与维护。

1.5 小结

目前,协程的主流实现方式是使用Python官方推荐的asyncio模块和async&await关键字,广泛应用于tonado、sanic、fastapi、django3等框架中。

协程的意义在于利用单线程实现多任务并发执行,特别适用于有IO操作的程序中,可以利用IO等待时间执行其他代码,提升程序执行效率。

例如在爬虫应用中,使用异步编程可以同时下载多个url_list中的图片,比同步编程更高效。因为基于异步编程的程序可以在IO等待时间执行其他任务。

基于async & await关键字的协程实现异步编程,这是Python异步编程的主流技术。接下来将详细讲解asyncio模块与async&await的关键概念。

事件循环是异步编程的核心,它是一个while循环,周期性地运行并执行任务。通过事件循环可以获取和创建任务。编写程序时,可以通过代码获取并创建事件循环。

协程函数定义形式为async def,返回协程对象。调用协程函数时,函数内部代码不会立即执行,而是返回一个协程对象。事件循环与协程对象配合执行协程内部代码。

await关键字用于在遇到IO操作时挂起当前协程,允许其他协程执行。示例展示了如何使用await挂起协程,让事件循环执行其他任务。

Task对象用于并发调度协程,通过asyncio.create_task(协程对象)创建Task,将协程加入事件循环等待执行。Task对象继承自Future对象,提供任务状态的追踪。

在程序中,使用asyncio.Future对象处理异步操作的最终结果,Future对象可以绑定函数,通过手动设置实现结果处理。异步迭代器和异步上下文管理器也是异步编程中支持的特性。

uvloop是asyncio的高性能事件循环替代方案,使用uvloop可以显著提升程序性能。在项目中替换asyncio的事件循环非常简单。知名asgi uvicorn框架内部使用uvloop事件循环。

实战案例包括异步操作Redis、MySQL和使用FastAPI框架。在这些场景中,异步编程通过并发处理请求,提升程序性能。

总结,异步编程通过协程技术实现了高效的并发执行,提供了更好的性能和资源利用。随着越来越多框架转向异步编程,其在现代开发中的应用变得越来越普遍。2024-11-04
mengvlog 阅读 26 次 更新于 2025-08-07 13:49:05 我来答关注问题0
  • 在程序中,使用asyncio.Future对象处理异步操作的最终结果,Future对象可以绑定函数,通过手动设置实现结果处理。异步迭代器和异步上下文管理器也是异步编程中支持的特性。uvloop是asyncio的高性能事件循环替代方案,使用uvloop可以显著提升程序性能。在项目中替换asyncio的事件循环非常简单。知名asgi uvicorn框架内部使...

  •  翡希信息咨询 一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)

    定义:异步编程是一种编程范式,允许程序在等待某些操作完成时,继续执行其他任务。实现方式:Python的asyncio模块自3.4版本引入,采用协程实现并发。它使用单线程的事件循环来管理异步任务。特点:异步编程适用于I/O密集型任务,能够减少阻塞,提高程序的整体效率。应用场景:当程序需要频繁进行I/O操作时,异...

  • 这里可能有人会问, 为什么要用asyncio.sleep, 而不用time.sleep呢? 因为, await后面一个要跟一个future(一个异步函数的实例化对象), 可是time.sleep并不是异步函数, 也就不支持协程间切换, 就没法实现并发, 只能串行 importasyncioimporttime async def play_game(): """玩游戏""" print('start...

  •  翡希信息咨询 一文读懂Asyncio

    asyncio 是编写并发代码的 Python 库,以 async/await 语法为基础,适用于高性能异步框架。以下是关于 asyncio 的详细解读:1. asyncio 的基本概念 异步编程:允许同时执行多个任务,不必等待一个任务完成。与同步执行相对。 协程:比线程更轻量级的并发单位。协程函数定义时得到的是协程对象,而非执行结果。

  •  翡希信息咨询 关于asyncio异步io并发编程

    asyncio是Python3.4以后处理异步IO并发编程的核心工具。以下是关于asyncio异步IO并发编程的关键点:核心机制:事件循环:是asyncio应用的核心,负责调度任务和回调。事件循环提供了一系列方法,如运行和停止循环,调度回调等。回调模式:通过协程实现异步编程,提高代码的可读性和可维护性。IO多路复用技术:如...

檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部