2012-04-28 9 views
2

現在、私は小さなPythonスクリプトを複数のスレッド/コアをサポートするように変換しようとしています。私は数日前からマルチプロセッシングモジュールについて読んできました。私はいつも私のニーズに合わせるよう努力してきましたが、なぜそれがうまくいかないのかわかりません。Python 3でのプールとマルチプロセッシングの問題

Thisはワーキングコードであり、thisはプールワーカーを実装する私のアプローチです。ロックが設定されていないため、最初はあまりにも複雑にしたくないので、既にログに記録するのを無効にしました。

まだ動作しません。それはどんな種類のエラーメッセージも出力しません。それを実行した後、ウェルカムメッセージが表示された後、ただ実行し続けますが、変換されたファイルあたり2行(変換前+変換後)の任意の出力は出力されません。

答えて

1

すべての従業員は、開始されたサブプロセスが完了するのを待っています。彼らは外部のサブプロセスによって実行されるような実際の作業がないので、常にアイドル状態になります。 あなたが本当に過大な作業をするためにマルチプロセッシングを使用すると、スレッドを使用する方がはるかに適切です。

あなたがマルチプロセッシングを行う方法を学習したい場合は、プロセス間通信を必要とする何かをしようと、同期、パイプ、...

だけでなく、あなたの質問に対処するために: HAVA取るsubprocess.call何の引数を見て。空白で区切られた単一のコマンド文字列で呼び出すことができます。それを動作させたい場合はshell=Trueを渡す必要があります。それ以外の場合は、文字列全体が実行可能ファイルの名前として解釈されます。
好適な方法は、リストとしてプログラムと引数を指定することですされたサブプロセスを使用してプログラムを呼び出すには:その答えを

subprocess.Popen(['/path/to/program', 'arg1', 'arg2'], *otherarguments) 
+0

感謝を!私はこれが一種の過酷なことだと知っていますが、.mkvの複数のギグを変換するときに時間を節約するかもしれません。とにかく、私はあなたのヒントを正しく得て、コールの代わりにPopenを使用して、引数をリストとして使用しようとしました。それでも、[これ](http://pastebin.com/J9bssM1x)は、呼び出しのあるバージョンと同じ方法で終了し、ウェルカムメッセージの後にハングアップし、何も出力しないか、終了しません。 –

+0

いいえ、Pythonのサブプロセスは、os-subprocessesが終了するのを待っているだけなので、いつでもあなたを救うことはできません。 – mata

+0

申し訳ありませんが、私はちょっと気分が悪いと感じています。あまり理解できていません...あなたはos-subprocessesをどういう意味ですか? Afaik mkvmerge/mkvtoolnixはシングルスレッドのユーティリティであるため、一度に1つのプロセスにする必要があります。そして、私の意見では少なくとも、pythonのサブプロセスは、各サブプロセスのmkvmergeのプロセスを生成し、cpu_cores()によって決定される並列プロセスの最大数を生成する必要があります。次に、1つのサブプロセスが終了した場合、残りの/がある場合は、次のジョブ/ファイルを取得する必要があります。しかし、私はここで誤解がたくさんあるように感じます。 :/ –

関連する問題