实例分析asyncio实现python异步任务
1.分析对象asyncio
asyncio包是python之父Guido在python仓库之外开发的一个库,其作用是使用事件循环驱动的协程实现并发。asyncio类型的事件驱动框架的运作方式为:在单个线程中使用一个主循环驱动协程执行并发活动,使用协程进行并发编程时,协程会不断把控制权让步给主循环,激活并向前运行其他协程,从而执行各个并发活动。
2.了解yield from句法
yield from:asyncio包中使用了大量的yield from语句,可以说yield from句法的特性是asyncio包实现异步调度线程的最大功臣。把职责委托给子生成器的句法,使用它可以把复杂的生成器重构成小型的嵌套生成器,省去了之前把生产器的工作委托给子生成器所需的大量样本代码。在协程中,yield from的主要功能是打开双向通道,把最外层的调用方与最内层的子生成器连接起来,这样二者可以直接发送和产出值,还可以直接传入异常,而不用在位于中间的协程中添加大量处理异常的样板代码。有了这个结构,协程可以通过以前不可能的方式委托职责。以下是在协程中使用yield from语句需要了解的新的术语:
- 委派生成器
- 包含yield from表达式的生成器函数,委派生成器在yield from表达式处暂停时,调用方可以直接把数据发给子生成器,子生成器再把产出的值发给调用法。子生成器返回之后,解释器会抛出StopIteration异常,并把返回值附加在异常对象上,