我有一个函数,它向ThreadPoolExecutor
提交几个任务,并返回每个提交所创建的Futures列表:
def submit_tasks() -> [Future]:
futures = []
for i in range(10):
future = executor.submit(Task())
futures.append(future)
return futures
def submit() -> Future:
futures = submit_tasks()
# I would like this function to return a single Future that clients can use to check
# whether all futures in the list have completed. How to do that?
字符串
Python 3.8
我想让这个函数返回一个Future,客户可以用它来检查列表中的所有期货是否都完成了。如何做到这一点?
2条答案
按热度按时间disho6za1#
我的解决方案
因为python的标准库不提供这样的功能,我创建了一个小助手类,它可以将多个
Future
对象合并组合成一个Future
。当它完成时,可以使用complete_when
参数进行配置。所属类别:
字符串
与OP的代码一起使用:
型
这是因为
CombinedFuture
是Future
的子类。为什么
concurrent.futures.wait
不工作这个问题明确地指出,它应该是一个
Future
,当所有的期货完成时完成。concurrent.futures.wait
不返回Future
。它只是做一个阻塞等待,直到所有给定的期货都完成。然后它返回一个由两个Future列表组成的元组。使用方法:
型
为什么可能需要获取
Future
而不是使用concurrent.futures.wait
Future
可以传递给其他函数,然后这些函数可以注册完成回调(通过add_done_callback
),或者可以轮询Future
完成(通过done()
)。对于其他原因,请参阅
CombinedFuture
类的文档。mznpcxlj2#
使用
concurrent.futures.wait
:https://docs.python.org/3/library/concurrent.futures.html#module-functions字符串