Python asyncio Event Loop 核心运行流程
Single-Threaded Asynchronous I/O — 事件循环每一次迭代的工作步骤
1
就绪队列执行
Execute Ready Callbacks
collections.deque _ready
2
I/O 多路复用等待
selector.select(timeout)
epoll / kqueue / IOCP
3
处理 I/O 就绪事件
将回调加入 _ready 队列
sock_readable → callback
4
检查定时器堆
Process Scheduled Timers
heapq _scheduled(最小堆)
遇到 await I/O
I/O 就绪返回
回调入队 _ready
到期回调入队
timeout = next_timer - now
INFINITE
LOOP
协程生命周期 Corouting Lifecycle
创建协程
→
加入就绪队列
→
执行中
→
await 挂起
→
等待 I/O
→
I/O完成 → 恢复
→
返回结果