asyncio 底层 协程运行的机制
协程运行机制:底层维护一个队列,所以就绪任务加入到该队列中,while无限循环遍历队列依次执行任务具体实现:asyncio.run()方法会初始化一个loop循环队列,例如:import asyncio async def bg(): print(bg开始执行) await asyncio.sleep(0.1) print(bg结束) async def main(): print(1 创建任务) asyncio.create_task(bg()) print(2 任务已入队还没切循环) # 执行完print当前语句结束控制权还给loop # loop取出bg执行打印 bg开始执行 await asyncio.sleep(0.2) print(3 主函数结束) asyncio.run(main())asyncio.run( main() ) 会将main()线程放到loop就绪,执行该程序,运行main()线程时,程序顺序执行, print(1 创建任务)待运行到 asyncio.create_task(bg())时,会将bg()作为新的线程加入到loop就绪队列中,此时主线程不会阻塞,继续执行后续代码 print(2 任务已入队还没切循环)。主线程执行至await asyncio.sleep(0.2)会时,会阻塞当前线程,在loop顺序调度下,去执行bg程序。(实际上await关键字作用: 检查并等待当前线程是否完成,若扔没完成则将程序控制权交给loop调度,当前线程阻塞,若完成,则接收await关键字后面的任务return的数据)