これに先立ち、同じ時間に複数のコマンドを実行します。時間を節約するために コマンド 、私は同じではこれら2つのコマンドを実行したいです時間、メイクファイル
おかげthreadingモジュールで Lyn(リン)
これに先立ち、同じ時間に複数のコマンドを実行します。時間を節約するために コマンド 、私は同じではこれら2つのコマンドを実行したいです時間、メイクファイル
おかげthreadingモジュールで Lyn(リン)
スレッドモジュールは、グローバルインタープリタロックのためにパフォーマンスが向上しません。
私はこれを行う最良の方法は、subprocess
モジュールを使用し、それ自身のstdoutで各コマンドを開くことだと思います。
processes = {}
for cmd in ['cmd1', 'cmd2', 'cmd3']:
p = subprocess.Popen('cmd1', stdout=subprocess.PIPE)
processes[p.stdout] = p
while len(processes):
rfds, _, _ = select.select(processes.keys(), [], [])
for fd in rfds:
process = processses[fd]
print fd.read()
if process.returncode is not None:
print "Process {0} returned with code {1}".format(process.pid, process.returncode)
del processes[fd]
あなたは基本的に記述子が準備ができているとあなたが「読み」を行うことは、それらを終了させたかどうかを確認するために彼らのリターンコードをチェックする必要がどのファイルを参照するために選択を使用する必要があります。プロセスは、stdoutが閉じられるまで、基本的に待機状態になります。あなたが待っている間にいくつかのことをしたい場合は、select.select()にタイムアウトを置くことができますので、待ってから待ってください。あなたはrfdsの長さをテストすることができ、0であればタイムアウトが発生したことを知っています。
ルックで平行法などがあります。
twisted
またはselect
モジュールがおそらくあなたの後ろです。
あなたがしたいすべてがバッチコマンド、シェル・スクリプトの束がある場合、すなわち
#!/bin/sh
for i in "command1 command2 command3"; do
$i &
done
よりよく働くかもしれません。あるいは、あなたのようなMakefileが言いました。
http://docs.python.org/library/threading.htmlを参照してください。 – GWW
なぜ 'subprocess.Popen() 'を使用していませんか? –