🐍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一调用就执行完