一些Pre关键概念
asyncio 本质上还是单进程单线程的Python程序;
建立event_loop 概念,上面event_loop 可以理解为大脑,下面是若干个可执行的Task;
Task 没有控制权,没有办法控制event_loop 执行某个Task,只能说明目前在等待哪个Task执行完毕或已准备好执行,由event_loop 控制由哪个Task执行;
Event_loop 一旦开始运行Task,必须由Task显式地交出控制权,把控制权交还给EventLoop,具体做法有:await 和 函数执行完毕;
区分Coroutine 和 Task,Coroutine 只有变成 Task 才能够运行;
拿到Coroutine的返回值需要await = xx 操作
尽管协程是并发的,但同一时刻仅一个程序再跑,优势在于等待时间会被充分利用;
Coroutine 与 Task
Coroutine 有分为 Coroutine Function 和 Coroutine Obj 。 Coroutine Function 是由 asyncio定义,调用Coroutine Function得到的返回值是Coroutine Obj,
import asyncioasync def main():print('hello')await asyncio.sleep(1)print('world')coro = main()
其中main函数(Coroutine Function)并不会运行,仅返回一个coroutine obj
那如何使得这个程序运行?
- 从 synchronize 模式 切换到 asynchronize 模式, 切换到Event_loop控制任务执行
- 把coroutine obj 转换为 Task
使用 asyncio.run 实现