2

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

これが作業コードでありプール ワーカーを実装するための私のアプローチです。ロックが設定されておらず、最初はあまり複雑にしたくなかったので、ファイルへのログ記録を無効にしました。

それでもうまくいきません。どんな種類のエラーメッセージも出力しません。実行後、ウェルカムメッセージが表示され、実行が継続されますが、変換されたファイルごとに 2 行 (変換前 + 変換後) の目的の出力は出力されません。

4

1 に答える 1

1

ワーカーが行うことは、開始されたサブプロセスが終了するのを待つことだけです。外部サブプロセスによって実行される実際の作業はありません。そのため、常にアイドル状態になります。実際にマルチプロセッシングを使用するのはやり過ぎです。そのためにスレッドを使用する方がはるかに適切です。

マルチプロセッシングの方法を学びたい場合は、プロセス間通信、同期、パイプなどを含むものを試してください...

しかし、あなたの質問にも対処するには、どのような引数が必要かを見てくださいsubprocess.call。スペースで区切られた単一のコマンド文字列で呼び出します。それを機能させたい場合は、渡す必要がありますshell=True。そうしないと、文字列全体が実行可能ファイルの名前として解釈されます。
サブプロセスを使用してプログラムを呼び出す好ましい方法は、プログラムと引数をリストとして指定することです。

subprocess.Popen(['/path/to/program', 'arg1', 'arg2'], *otherarguments)
于 2012-04-29T01:33:01.040 に答える