Grace's Dev Site
write关于我
闭坑指南 · Python#异步 #并发

asyncio 异步常见误区

async 函数必须 await;阻塞调用会卡死整个事件循环。

asyncio 异步常见误区

1. 忘了 await

async def fetch():
    return 1

async def main():
    fetch()  # 返回 coroutine 对象,不会执行!
    await fetch()  # 正确

2. 在 async 里用阻塞 I/O

time.sleep(5)requests.get()阻塞事件循环,其他协程全停。

改用 await asyncio.sleep(5)aiohttp 等异步库,或 asyncio.to_thread() 把阻塞丢进线程池。

3. 以为 async 一定更快

async 优势是 高并发 I/O 等待,不是让单次 CPU 计算变快。CPU 密集仍要进程池。

4. 混用线程与 asyncio

可以,但要用 loop.run_in_executor 等明确边界,避免在协程里直接起裸线程改共享状态。

5. 异常被吞

asyncio.gather(..., return_exceptions=True) 要检查返回值;create_task 的异常在 task 里,记得 await 或加 done callback。