私はThreadPoolExecutor
を使用しており、ワーカースレッドが失敗した場合に備えて計算全体を中止する必要があります。どのワーカースレッドでスローされた例外をすぐに再発生させるには?
ThreadPoolExecutor
が自動的に例外を再発生しませんので、これは関係なく、エラーの成功を印刷します。1.例。 .result()
例外を再発生させますので
from concurrent.futures import ThreadPoolExecutor
def task():
raise ValueError
with ThreadPoolExecutor() as executor:
executor.submit(task)
print('Success')
例2これは正しく、メインスレッドがクラッシュします。しかし、最初のタスクが完了するのを待つので、メインスレッドは遅延を伴う例外を経験します。
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')
にはどうすれば失敗を処理し、残りの労働者を中止し、それが発生した直後にメインスレッド(多かれ少なかれ)における労働者の例外を気づくことができますか?