gpt4 book ai didi

python - 检测并发中失败的任务。futures

转载 作者:行者123 更新时间:2023-12-02 11:59:36 25 4
gpt4 key购买 nike

我一直在使用concurrent.futures,因为它有一个简单的界面,可以让用户轻松控制最大线程/进程数。然而,concurrent.futures 似乎隐藏了失败的任务,并在所有任务完成/失败后继续主线程。

import concurrent.futures

def f(i):
return (i + 's')

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
fs = [executor.submit(f, i ) for i in range(10)]
concurrent.futures.wait(fs)

对任何整数调用 f 都会导致类型错误。然而,整个脚本运行得很好,并以代码 0 退出。有没有办法让它在任何线程失败时抛出异常/错误?

或者,是否有更好的方法来限制线程/进程的数量而不使用并发。futures?

最佳答案

concurrent.futures.wait 将确保所有任务完成,但它不会检查成功(return-ed)与失败(引发异常但未陷入 worker 职能)。为此,您需要调用 .result()在每个 Future 上(这将导致它重新引发任务中的异常,或生成返回值)。还有其他方法可以在不实际在主线程中引发的情况下进行检查(例如 .exception()),但 .result() 是最简单的方法。

如果你想让它重新raise,最简单的方法就是将 wait() 调用替换为:

for fut in concurrent.futures.as_completed(fs):
fut.result()

它将在 Future 完成时处理结果,并在发生异常时立即引发一个异常。或者,您可以继续使用 wait,以便在检查其中任何任务的异常之前完成所有任务,然后直接迭代 fs 并调用 .result() 每个。

关于python - 检测并发中失败的任务。futures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com