我正在使用
ThreadPoolExecutor
,如果任何工作线程失败,我需要中止整个计算。
示例 1. 这将打印成功,无论错误如何,因为 ThreadPoolExecutor
不会自动重新引发异常。from concurrent.futures import ThreadPoolExecutor
def task():
raise ValueError
with ThreadPoolExecutor() as executor:
executor.submit(task)
print('Success')
例子2. 这个例子正确地使主线程崩溃,因为.result()
会重新引发异常。但是它会等待第一个任务完成,所以主线程会延迟体验到异常。import time
from concurrent.futures import ThreadPoolExecutor
def task(should_raise):
time.sleep(1)
if should_raise:
raise ValueError
with ThreadPoolExecutor() as executor:
executor.submit(task, False).result()
executor.submit(task, True).result()
print('Success')
如何在主线程中立即注意到工作线程异常,在异常发生后立即处理失败并中止其余工作线程?