Python ThreadPoolExecutor抑制异常

J F*_*ird 5 python exception

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')
Run Code Online (Sandbox Code Playgroud)

上面的程序将完全运行,没有任何错误消息。

仅当您显式调用future.result()或时future.exception()(如我在注释行中所做的那样),您才能获得异常。

我想知道为什么这个Python模块即使隐藏了问题也选择了这种行为。因此,我花费了数小时来调试编程错误(在类中引用了不存在的属性),否则该错误将在程序异常崩溃(例如Java)时非常明显。

del*_*ica 5

我怀疑原因是因为一个线程引发异常,所以整个池不会崩溃。这样,池将处理所有任务,并且如果需要,您可以分别获取引发异常的线程。