【发布时间】:2017-01-19 06:35:35
【问题描述】:
我正在使用ThreadPoolExecutor 并且需要中止整个计算以防任何工作线程失败。
示例 1。 无论错误如何,都会打印 Success,因为 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')
如何在主线程发生异常后立即(或多或少)注意到它,以处理故障并中止剩余的工作线程?
【问题讨论】:
标签: python multithreading python-3.x exception threadpoolexecutor