赞
踩
协程介绍
协程,又称为微线程,它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们就可以把一个协程切换到另一个协程。
CPU上下文(CPU寄存器和程序计数器):
协程与线程差异
yield实现协程
生成器扩展
— 2
— 3
作用:
替代产出值的嵌套for循环
—2
yield from的主要功能是打开双向通道
使用yield from
greenlet实现
gevent介绍
greenlet已经实现了协程,但是这个还的人工切换,就很麻烦,python还有一个比greenlet更强大的并且能够自动切换任务的模块gevent
原理: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行
由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO
gevent使用
同步与异步
同步:是指代码调用IO操作时,必须等待IO操作完成才返回的调用方式,多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行, 只有一个主线
异步:是指代码调用IO操作时,不必等IO操作完成就返回的调用方式,多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线
async/await实现协程
Python中使用协程最常用的库就是asyncio
快速上手
协程函数,定义函数时候 async def 函数名 。
协程对象,执行 协程函数() 得到的协程对象。
await
Tasks
Tasks用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。除了使用 asyncio.create_task() 函数以外,还可以用低层级的 loop.create_task() 或 ensure_future() 函数。不建议手动实例化 Task 对象。
注意:asyncio.create_task() 函数在 Python 3.7 中被加入。在 Python 3.7 之前,可以改用低层级的 asyncio.ensure_future() 函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。