python マルチプロセスでプロセスの終了を検出する
やりたいこと
各プロセスに永続する処理を実行させた際に、1つでも例外で終了したら他すべてのプロセスを終了させ、プログラム全体を終了させたい。
コード
import multiprocessing import time def worker(n): while True: time.sleep(n) if n==2: raise Exception("error") if __name__ == '__main__': processes = [] # 3つのプロセスを起動 p1 = multiprocessing.Process(target=worker, args=(1,)) p2 = multiprocessing.Process(target=worker, args=(2,)) p3 = multiprocessing.Process(target=worker, args=(3,)) p1.start() p2.start() p3.start() processes.append(p1) processes.append(p2) processes.append(p3) # どれかのプロセスが終了するまで待機 while all([p.is_alive() for p in processes]): time.sleep(1) continue # すべてのプロセスを終了させる for p in processes: p.terminate() p.join()
出力 2秒後に例外が発生し、プログラム全体終了します。
Process Process-2: Traceback (most recent call last): File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap self.run() File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run self._target(*self._args, **self._kwargs) File "/home/wood_stock/work/tmp/multi_prosecc_exc.py", line 8, in worker raise Exception("error") Exception: error