Skip to content

Python asyncio从基础用法到运行过程

用一组可运行的小程序理解 asyncio:连续 await、gather、create_task、限流、超时、Queue、TCP echo。每一节只增加一个问题,并把代码背后的事件循环、Future、Task 和取消规则讲清楚。

学完能解决什么

asyncio 经常被讲成“单线程并发”或“遇到 I/O 就切换”。这句话没错,但不够用。只要程序里有几个同时进行的 I/O 操作,你还得弄清楚几件具体的事:

  • async def 调用后为什么不立刻执行。
  • await 到底把控制权交给了谁。
  • create_task 为什么能让多个协程早点开始跑。
  • TaskGroup 为什么比裸 gather 更适合管一组相关任务。
  • StreamWriter.drain() 为什么不是装饰性的等待。
  • 事件循环、selector、Future 和 Task 在源码里怎么互相调用。

本教程按这个顺序来:

如果目标是把 asyncio 用在日常 I/O 代码里,读完“起步”和“练习代码”就够用。要继续看清它为什么这样运行,再读“运行过程”和“Mini Asyncio”。

面向学习目的的 Python asyncio 中文教程与 mini_asyncio 教学运行时。