Python 模块 asyncio-异步IO,事件循环和并发

本文介绍了Python的异步IO框架asyncio,包括事件循环、协程Coroutine、Future和Task对象。asyncio通过单线程、单进程模式实现任务切换,提供协程创建并发应用,利用事件循环处理IO事件和任务调度。文章还讨论了如何运行协程、返回值以及如何在协程中调用普通函数和延迟调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块 asyncio 是一个异步IO和并发框架。

asyncio 提供了协程 coroutines 创建并发应用,它使用单线程,单进程的模式进行显示的任务切换。大部分的任务切换都发生在可能会阻塞的地方,例如读取文件或者网络等等。asyncio 提供了一些特性包括在指定时间运行某个任务,指示某个 coroutines 等待其他的完成才开始执行等等。

模块 threading 和 multiprocessing 分别使用多线程和多进程进行多任务的同步运行。

概念

大多数应用程序都是线性的开发,然后依赖语言底层的线程或者进程切换任务并行运行。基于 asyncio 开发的并发程序需要在程序中手动进行上下文的切换,因为它运行在单线程,单进程的模式上。下面是需要理解的一些概念。

asyncio 框架里需要重点专注的是事件循环(event loop),它是处理事件(event)的一个主要对象,例如IO事件、系统事件、应用任务切换等等。

应用首先需要注册(register)要运行的任务到事件循环中,当得到所需的资源后,已注册的任务被事件循环唤醒执行。例如服务端程序当收到一个客户端的请求或者有数据要读取时再执行操作,当处理完成后,立刻把控制权交回给事件循环准备接受下一个事件。

控制器交回给事件循环依赖协程 coroutines,它是一个特殊的函数把控制器交回而不丢失状态,这和 yield 非常类似。事实上,在 Python 3.5 之前要想实现协程,就要使用 yield 生成器函数。asyncio 提供了基于类的抽象层,可以直接写回调方法而不用写协程。

对象 Future 是一个表示结果的数据结构,asyncio 可以监控一个 Future 对象允许应用等待一项任务完成时返回。

Future 的子类 Task 知道怎么管理一个协程的执行,Task 可以等待一个资源可用时,由事件循环调用。

协程 Coroutine

协程 Coroutine 是运行并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值