116、asyncio 异步编程(二):Task、Future、gather、create_task 并发模式

📅 2026/7/3 3:40:41 👁️ 阅读次数 📝 编程学习
116、asyncio 异步编程(二):Task、Future、gather、create_task 并发模式

116、asyncio 异步编程(二):Task、Future、gather、create_task 并发模式

上周五晚上十一点,线上服务突然报警——某个爬虫任务队列堆积到两万条。我盯着日志里那行RuntimeError: Task <Task pending ...> got Future <Future pending ...> attached to a different loop,心里骂了一句:又是事件循环混用的问题。

这种坑,但凡用 asyncio 写过并发代码的人,十有八九都踩过。今天这篇笔记,我就从这几个核心对象讲起,把 Task、Future、gather、create_task 这些“并发武器”的脾气摸清楚。

Task 和 Future:别被官方文档绕晕

先说说 Future。很多人一上来就被“Future 是协程的最终结果容器”这种定义搞懵了。我换个说法:Future 就是一个“占位符”,协程跑完之前它空着,跑完了它里面放结果或者异常。

importasyncioasyncdef