🐍Python 并发与异步

asyncio事件循环与await

面试回答

常见问法

asyncio 的事件循环怎么理解?await 到底在等什么?

回答

asyncio 是 Python 的协程异步框架,核心是事件循环。事件循环负责调度协程,在某个协程遇到可等待操作时切出去,让别的任务继续执行。

await 等的不是“线程完成”,而是“一个 awaitable 对象准备好结果”。

import asyncio

async def work():
    await asyncio.sleep(1)
    return "done"

asyncio.run(work())

追问

  • 协程为什么适合高并发 IO
  • await 和阻塞睡眠有什么区别
  • async def 调用后为什么不会立刻执行

原理展开

async def 定义的是协程函数,调用后得到协程对象,不会自动跑起来。

async def hello():
    print("hello")

coro = hello()

真正驱动它的是事件循环。常见等待点如:

  • 网络请求
  • 定时器
  • 异步文件/IO 封装

如果在协程里写阻塞代码,比如 time.sleep(),就会卡住整个事件循环。因此异步代码的关键不是语法,而是“全链路都要异步友好”。

易错点

  • 把协程当成线程
  • async 函数里写阻塞 IO
  • 以为 async def 一调用就执行完