web-dev-qa-db-ja.com

PythonのCPU使用率を増やす方法

Pythonを使用して、いくつかのアルゴリズムを実行し、どのPythonを使用しているかに関係なく、多くのバージョンを試しましたが、CPU使用率が最大で25%になります。理由Python残りのCPUリソースを利用しませんか?)サービスの優先度を通常から高に、後でリアルタイムに変更しましたが、その間に再起動がありましたが、何も変わりませんでした。

Python CPUを50%以上使用する方法はありますか?

21
user97325

簡単に言うと、4つの論理コアを備えたシステムでシングルスレッドアプリケーションを実行しているということです。つまり、すべてのコアを使用する1つのプロセスがあります。

アルゴリズムをマルチスレッド化するように書き直す必要があります(これは簡単なことではありません)。特定のコアで2つ以上のインスタンスを実行して、CPUをより多く使用できるかどうかを確認する必要があります。他に方法はありません。

20
Journeyman Geek

Python言語はマルチコアCPUよりも古いため、ネイティブで使用しないのは奇妙なことではありません。

さらに、すべてのプログラムが複数のコアから利益を得ることができるわけではありません。次のステップが前のステップの結果に依存するステップで行われる計算は、より多くのコアを使用すると速くなりません。 ベクトル化できる問題(同じ計算をデータの大きな配列に適用する)は、個々の計算が独立しているため、比較的簡単に複数のコアを使用できます。

あなたが多くの計算をしているとき、私はあなたが numpy を使用していると仮定していますか?そうでない場合は、チェックしてください。これは、ATLASなどの最適化された線形代数ライブラリを使用できるCで記述された拡張機能です。標準のPythonと比較して、数値計算を大幅に高速化できます。

そうは言っても、Pythonで複数のコアを使用するにはいくつかの方法があります。

  • 組み込みはmultiprocessingモジュールです。 _multiprocessing.Pool_クラスは、map()および関連メソッドを使用して、複数のCPUにまたがるベクトル化を提供します。ただし、ここにはトレードオフがあります。プロセス間で大量のデータを通信する必要がある場合、そのオーバーヘッドは複数のコアの利点を打ち消す可能性があります。
  • Numpyの適切なビルドを使用します。 numpyがマルチスレッドATLASライブラリを使用してビルドされている場合、大規模な問題でより高速になります。
  • numexprparallel pythoncorepy または Copenhagen Vector Byte Code のような拡張モジュールを使用します。

threadingモジュールは、この点でそれほど有用ではないことに注意してください。メモリ管理をシンプルに保つために、グローバルインタープリターロック( "GIL")は、一度に1つのスレッドのみが実行できることを強制しますpythonバイトコード。ただし、numpyなどの外部モジュールは、内部で複数のスレッドを使用できます。

15
Roland Smith