2013-02-27 7 views
45

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

# main_script.py 

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

waitメソッドを使用します。 'p1.wait(); p2.wait() ' –

+1

この質問をチェック:http://stackoverflow.com/questions/6341358/subprocess-wait-not-waiting-for-popen-process-to-finish-when-using-threads – Calum

+2

http: //stackoverflow.com/questions/100624/python-on-windows-how-to-wait-for-multiple-child-processes – Gjordis

答えて

69

Popen目的は、まさにこのために定義され.wait()方法を有していますその終了ステータスを戻すため)。

この方法を使用すると、プロセスゾンビが長すぎるのを防ぐことができます。

(あるいは、呼び出しと待機のためにsubprocess.call()またはsubprocess.check_call()を使用することができます)このプロセスでIOを必要としない場合、これで十分かもしれませんが、2つのサブプロセスがあなたは待つには、いくつかのサブプロセスを持っている場合、彼らは(check_call()。)

は、あなたが行うことができないであろうとされ、並行して実行することになってすることとすぐにすべてのサブプロセスを持っているとして返し

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

終了しました。おそらく評価できるリターンコードのリストがあります。

+6

問題は、* 1つだけではなく、すべての*サブプロセスを待つ方法でした。 –

+2

@GregWard何かを待っていると、私はすべてを連続して待つことができます。特にこの状況では。 – glglgl

+2

そして、私はこの細部のほんの一部が欠落していると答えが役に立たないとは思わない。 – glglgl

12
subprocess.call 

自動的にも使用することができ、待機:指定されたサブプロセスの完了を待つ(そして、他にする:

p1.wait() 
関連する問題