web-dev-qa-db-ja.com

PythonサブプロセスのCPU使用率を最大化する方法は?

PythonスクリプトでC++実行可能ファイルを起動しています。

C++実行可能ファイルは、通常、実行に数時間かかるマルチスレッドプログラムです。 C++コードの記述方法は、可能であればCPUのすべてのコアで実行されます。

ただし、Pythonスクリプトを実行してタスクマネージャーを確認すると、PythonスクリプトがCPUの30%しか使用していないことがわかりました。これは30%には、実行可能ファイルを実行しているサブプロセスのCPU使用率も含まれます。これは、実行可能ファイルが0%のCPU使用率でタスクマネージャーに表示されるためです(ただし、実際には実行され、結果が生成されます)。実行可能ファイルは7%のCPU使用率に急上昇し、 0%に戻します。

このサブプロセスのCPU使用率を増やして時間を節約する方法はありますか?

編集:多分私はこれを指定する必要がありますPythonスクリプトはパイプを介してC++サブプロセスと通信しています。実行中、サブプロセスはパイプを介してPythonスクリプトはデータベースにアップロードされ、スクリプトのCPU使用率が高いことを説明している可能性があります。

1
Chuque

C++コードの記述方法、可能であればCPUのすべてのコアで実行されます

さて、あなたは実際にこれをテストするでしたか、それともこれを想定していますか? C++をコマンドラインから直接起動するとどうなりますか?

ただし、Pythonスクリプトを実行してタスクマネージャーを確認すると、PythonスクリプトがCPUの30%しか使用していないことがわかりました。これは30%には、実行可能ファイルを実行しているサブプロセスのCPU使用率も含まれます

それは間違いです。 PythonスクリプトがCPUの30%を使用している場合、スクリプトはサブプロセスではなく、それ自体で処理を実行しています。コードを確認せずにスクリプトの動作を説明することは不可能ですが、私の推測では非常に非効率的な方法でサブプロセスの終了を待機することにより、CPUサイクルを浪費する可能性があります。

実行可能ファイルは0%のCPU使用率でタスクマネージャーに表示されます(ただし、実際に実行され、結果が生成されています)

この動作は、実行可能ファイルが低い優先度で実行されているときに発生する可能性がありますが、Pythonプロセスの優先度が高く、C++プログラムの実行がブロックされます。アクセスまたは他の共有リソースへのアクセス。私はこれらの種類のものをチェックします。

1
Doc Brown

グローバルインタープリターロック(別名GIL) が原因で、PythonスレッドはCPUバウンドの負荷には適していません。I/ Oバウンドの負荷でのみ機能します。

CPUにバインドされたタスクですべてのコアを使用する場合は、 se Python processes を使用するか、別の言語を使用します。

0
9000