Python ThreadPoolExecutor抑制异常


from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED

def div_zero(x):
    print('In div_zero')
    return x / 0

with ThreadPoolExecutor(max_workers=4) as executor:
    futures = executor.submit(div_zero, 1)
    done, _ = wait([futures], return_when=ALL_COMPLETED)
    # print(done.pop().result())
    print('Done')

上面的程序将运行到没有任何错误消息的情况下完成。

您只有明确调用future.result()future.exception(),就像我在行中所做的一样。

我想知道为什么这个Python模块也选择了这种行为,即使它隐藏了问题。因此,我花了几个小时调试编程错误(在类中引用一个不存在的属性(,否则,如果程序只是崩溃的,例如Java,例如Java。

我怀疑原因是,整个池不会因为一个线程增加一个异常而崩溃。这样,池将处理所有任务,您可以获得如果需要的话,可以分别列出异常。

每个线程(主要是(与其他线程(包括主线程(隔离。在要求它这样做之前,主线程不会与其他线程通信。

这包括错误。结果就是您看到的,发生其他线程的错误不会干扰主线程。您只需要在要求结果时处理它们。

最新更新