使用Dask异步Client时await futures出现TypeError报错
解决异步Dask Client中
await futures或gather报错的问题 错误原因
- 直接
await futures报错是因为await只能作用于单个可等待对象,而你传入的是Future对象的列表,Python无法直接await一个列表。 - 当Client开启
asynchronous=True时,dask_client.gather()是异步方法,必须搭配await使用,直接调用会返回协程对象,后续处理不当也会引发问题。
正确用法
方法1:使用异步版gather并搭配await(推荐)
results = await dask_client.gather(futures)
异步Client的gather方法会自动处理列表中的所有Future,返回对应结果列表,且做了集群层面的优化,效率更高。
方法2:用asyncio.gather逐个等待Future(不推荐)
如果需要单独处理每个Future,可以借助asyncio的gather方法:
import asyncio results = await asyncio.gather(*futures)
这种方式仅适用于本地协程等待,没有Dask集群层面的优化,大任务场景下效率较低。
关键注意事项
- 所有异步调用必须在异步上下文中执行:比如在
async def定义的函数内,或者用asyncio.run()包裹整个异步逻辑。 - 异步Client的绝大多数方法都是异步的,调用时必须添加
await关键字。
内容的提问来源于stack exchange,提问作者Aman Agarwal
相关产品推荐
相关产品推荐

