テクノロジー · 実用ガイド
Python の「BrokenProcessPool」?バッチを再試行する前に停止した worker を特定する
親の例外は worker の異常終了を示すだけです。PID と task marker を保存し、spawn、native crash、OOM を分けてから pool を作り直します。

BrokenProcessPool は ProcessPoolExecutor の worker が clean に終了しなかったことを示します。通常の task exception、OOM、segfault、import error のどれかまでは示しません。worker が消えると複数の pending Future が同じ pool-level exception を受け取ります。
parent task ledger、worker PID marker、OS evidence を結合します。一つの cause branch と suspect input を隔離するまで batch 全体を再送しません。
再試行前に parent ledger を固定
submission ごとに task ID と input key、time、Future、side effect boundary を記録します。pool が壊れたら bulk retry を停止し stderr と service log を保存します。
複数 Future の BrokenProcessPool は、各 input が worker を kill した証拠ではありません。
worker start と phase を記録
task entry で PID、task ID、input key、Python version、start method、phase を flush します。initializer は小さく deterministic にし entry と success を記録します。
marker がなければ real .py file、importable main、必要な main guard、top-level callable、serializable argument を試します。fork に盲目的に切り替えません。
native crash と signal evidence を保存
suspect native code の前で faulthandler を有効にし durable stderr を使います。crash report、service status、container reason、child exit code を保存します。
negative exit status は signal の場合がありますが、pool failure 後に他 worker も terminate されます。最初の dead PID と時刻を相関します。
OOM branch を証明または否定
Linux cgroup v2 では実行前後の memory.events または memory.events.local を比較します。oom_kill delta は kill の証拠ですが high、max、oom は同じ意味ではありません。
cgroup path、memory.current、可能なら memory.peak、worker count、input size、per-process copy を記録します。max_workers の低下だけでは証明になりません。
一つの worker と input に縮小
同じ callable を serial に実行し、次に real file から one-worker executor で実行します。task/PID marker を保ち input を二分追加します。
one-worker が成功し multi-worker が失敗するなら total memory、file descriptor、native thread pool、start method を比較します。
causal recovery test で終了
一つの task、一つの PID、normal result または ordinary Future exception、oom_kill 不変、fatal crash なしを closure とします。小さい concurrency で各 input が一度だけ処理されることを確認します。
その後で worker count、memory limit、start method、native dependency、initializer、retry policy を変更し、cause、version、evidence window、idempotency rule を残します。
