python 等待任务期货时出现类型错误

mutmk8jj  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(152)

出现以下错误:TypeError: object list can't be used in 'await' expression
当我试图等待未来的dask_client.gather(futures)await futures
我正在使用asynchronous=True的Dask客户端
尝试参考官方文档https://distributed.dask.org/en/stable/asynchronous.html

yc0p9oo0

yc0p9oo01#

错误“类型错误:对象列表不能用于'await'表达式”出现,因为您尝试在Python列表上使用await关键字,而该列表不是异步对象。
当使用带有asynchronous=True选项的Dask Client时,gather方法返回Futures的列表,而不是可等待的对象。
以下是您可以解决此问题的方法:
您可以使用dask.async.compute函数将future列表转换为可等待的对象,而不是等待future列表。

await dask.async.compute(*futures)

您还可以使用dask.compute函数将future列表转换为结果列表

results = dask.compute(*futures)

另一种选择是使用concurrent.futures.as函数,该函数返回一个迭代器,该迭代器在future完成时生成future。

for future in concurrent.futures.as_completed(futures):
    result = await future
    # process the result

值得注意的是,在使用dask和asyncio时,建议使用dask.compute或dask.async.compute函数,而不是dask_client.gather函数。
此外,请确保您使用的是最新版本的Dask,因为此错误可能已在最新版本中得到解决。

相关问题