2 つ以上のサブ プロセスを作成するメイン プロセスがあります。すべてのサブ プロセスが操作を終了して終了するまで、メイン プロセスを待機させたいですか?
# main_script.py
p1 = subprocess.Popen(['python script1.py'])
p2 = subprocess.Popen(['python script2.py'])
...
#wait main process until both p1, p2 finish
...
2 つ以上のサブ プロセスを作成するメイン プロセスがあります。すべてのサブ プロセスが操作を終了して終了するまで、メイン プロセスを待機させたいですか?
# main_script.py
p1 = subprocess.Popen(['python script1.py'])
p2 = subprocess.Popen(['python script2.py'])
...
#wait main process until both p1, p2 finish
...
Popen
オブジェクトには、このために正確に定義されたメソッドがあります。.wait()
特定のサブプロセスの完了を待つ(さらに、その終了ステータスを再調整する)。
この方法を使用すると、プロセスゾンビが長時間横になっているのを防ぐことができます。
subprocess.call()
(または、を使用subprocess.check_call()
して呼び出しと待機を行うこともできます。プロセスでIOが必要ない場合は、それで十分かもしれません。ただし、2つのサブプロセスが並行して実行されることになっている場合は、これはオプションではない可能性があります。 、( call()
/ check_call()
。)ではありません
待機するサブプロセスが複数ある場合は、次のことができます。
exit_codes = [p.wait() for p in p1, p2]
これは、すべてのサブプロセスが終了するとすぐに戻ります。次に、評価できるリターンコードのリストがあります。
subprocess.call
Automatically waits , you can also use:
p1.wait()