3

子の1つが中止および/または例外をスローしたときにマルチプロセッシングを中止する適切な方法は何ですか?

私はそれに関するさまざまな質問を見つけました(一般的なマルチプロセッシングエラー処理例外でマルチプロセッシングプールを閉じる方法ですが、答えはありません...)が、子例外でマルチプロセッシングを停止する方法に関する明確な答えはありません。

たとえば、次のコードが必要です。

def f(x):
    sleep(x)
    print(f"f({x})")
    return 1.0 / (x - 2)


def main():
    with Pool(4) as p:
        try:
            r = p.map(f, range(7))
        except Exception as e:
            print(f"oops: {e}")
            p.close()
            p.terminate()
    print("end")


if __name__ == '__main__':
    main()

出力するには:

f(0)
f(1)
f(2)
oops: float division by zero
end

代わりにf、例外を検出/処理する前に、すべての項目に関数を適用します。

f(0)
f(1)
f(2)
f(4)
f(3)
f(5)
f(6)
oops: float division by zero
end

例外を直接キャッチする方法はありませんか?

4

1 に答える 1