1. ホーム
  2. python

[解決済み] すべてのサブプロセスが終了するまでプロセスを待つのですか?重複

2022-02-17 22:27:54

質問

私は、2つ以上のサブプロセスを作成するメインプロセスを持っています。私は、メインプロセスがすべてのサブプロセスの操作が終了するまで待機し、終了したいのですが?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...

解決方法は?

A Popen オブジェクトは .wait() メソッドは、まさにこのために定義されました。与えられたサブプロセスの完了を待ちます (さらに、その終了ステータスを返します)。

このメソッドを使用すると、プロセスゾンビが長時間放置されるのを防ぐことができます。

(別の方法として subprocess.call() または subprocess.check_call() を呼び出し、待機させます。もし、そのプロセスでIOを必要としないのであれば、それで十分かもしれません。しかし、おそらくこれはオプションではありません。なぜなら、もし二つのサブプロセスが並列に実行されることを想定しているならば、 ( check_ ) call() .)

待機するサブプロセスが複数ある場合は、次のようにします。

exit_codes = [p.wait() for p in p1, p2]

は、すべてのサブプロセスが終了するとすぐに返されます。そして、評価可能なリターンコードのリストが得られます。