什么是协程:
协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。
在Python中实现协程的方式有多种:
yield,生成器,借助生成器的特点也可以实现协程代码;
asyncio,在Python3.4中引入的模块用于编写协程代码;
async & awiat,在Python3.5中引入的两个关键字,结合asyncio模块可以更方便的编写协程代码;
使用最后一种方式编码的协程伪代码如下:
import asyncio
async def func():
print(1)
await asyncio.sleep(2) # 耗时操作
print(2)
tasks = [ asyncio.ensure_future(func()) for i in range(10)]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
协程相关概念:
协程函数:定义函数时候由async关键字装饰的函数
async def 函数名
协程对象:执行协程函数得到的协程对象
执行协程函数只会创建协程对象,函数内部代码不会执行。如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理。
asyncio.run( func())
await关键字:
await + 协程对象,遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)。
- Task对象
在事件循环中添加多个任务。Task用于并发调度协程,asyncio.create_task(协程对象)
tasks = [asyncio.create_task(fun_a()),
asyncio.create_task(fun_a()),
]