12%のCPU電力のみを使用するPythonインタープリター


26

テキスト解析のためにUbuntuでpythonを使用しています。システムモニターに示されているように、プログラムはCPU使用率が非常に高いにもかかわらず、常に12%のままです。

私はからプログラムの優先順位を変更NormalするVery Highが、それは効果がなかったです。

私のPythonプログラムが取得できるCPU使用量を制限しているのは何ですか?それを変更するにはどうすればよいですか?プログラムはより多くのCPUパワーを利用できますか?

回答:


73

8つの仮想コア(おそらくハイパースレッディングを備えたクアッドコア)を備えたCPUがあると思いますか?つまり、完全にロードされた1つのCPUスレッド/仮想コアは、合計ロードの12.5%に相当します。

Pythonインタープリターは、デフォルトでは1つのプロセスとしてのみ実行されるアプリケーションであるため、複数の仮想コアを利用することはできません。一緒に実行するコードがマルチスレッドを使用している場合でも、GIL(グローバルインタープリターロック)のため、CPUスレッド/仮想コアは1つしか使用しません。

Pythonプログラムがマルチプロセッシングを使用している場合にのみ、実際にPythonインタープリターの複数のインスタンスを起動し、タスクを完全に並列に実行できる場合にのみ、複数の仮想コア/ CPUスレッドを利用できます。(@SargeBorschが彼のコメントで指摘したように、マルチプロセッシングなしでこれを達成するためのいくつかの高度な方法もありますが、それは通常自分ですぐに書くものではありません。)


それは実際には非常に理にかなっています。はい、4コア(8仮想コア)のクアッドコアを使用しています。Ty
マティアス・ハーマン

9
@MatthiasHerrmannシステムモニターを検討して、各CPUの稼働率を確認することができます。そうすれば、8つのCPUのうち1つだけが100%であることがわかります。AUのテーマに関する1つのスレッドを次に示します。Windowsの「ガジェット」に相当するもの(wifiおよびCPUの使用)
WinEunuuchs2Unix

7
真実ではありませんが、単一のpythonプロセスのすべてのコアを問題なく使用できます。Cコードを呼び出してGILをリリースするだけです。そして、多くの既存のライブラリーがまさにそれを行います(例えば、numpy)。
セージボルシュ

2
または使用JythonまたはIronPythonGILを持ちません、。
ハーミングモニカを停止

19

このケースではあまり起こりそうもないもう1つの可能性は、プログラムがディスクにバインドされていること、つまり、ディスクへの読み書きが遅く、CPUがディスクを待機していることです。


5
iotopiowaitにバインドされたプログラムを監視しようとする

1
または、コード自体が同期的でブロックされています。
-Zydnar

それは多くの私のミスのおかげでした
Fipsi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.