asyncio 事件循环的工作原理
Python asyncio 的事件循环(Event Loop)是如何工作的?请解释事件循环的基本模型。
回答
苦行僧
事件循环是 asyncio 的核心,负责调度和执行协程。
工作流程:
- 注册协程、回调、I/O 事件到事件循环
- 事件循环不断循环,检查是否有就绪的任务
- 执行就绪的任务,遇到
await挂起并切换到其他任务 - I/O 操作完成时恢复对应的协程
import asyncio
async def main():
loop = asyncio.get_running_loop()
print(f'Event loop: {loop}')
# loop.run_in_executor 可与线程池/进程池集成
asyncio.run(main())
关键点:
- 单线程并发(不是并行)
- 通过
await显式让出控制权 - 适合 I/O 密集型,不适合 CPU 密集型
asyncio.run()在 Python 3.7+ 中自动管理事件循环