15

私はPython2.5.4を使用しています。私のコンピューター:CPU AMD Phenom X3 720BE、メインボード780G、4GB RAM、Windows732ビット。

Pythonスレッドを使用していますが、すべてのpython.exeプロセスで100%のCPUを消費させることはできません。なぜ彼らは平均して約33-34%しか使用していないのですか?

可能な限り迅速に完了するために、利用可能なすべてのコンピューターリソースをこれらの大規模な計算に向けたいと思います。

編集:みんなに感謝します。現在、Parallel Pythonを使用しており、すべてが正常に機能しています。私のCPUは常に100%になっています。皆さんありがとう!

4

8 に答える 8

39

3コアCPUを使用しているようです。ネイティブPythonコードで複数のCPUコアを使用する場合は、複数のプロセスを生成する必要があります。(2つ以上のPythonスレッドを異なるCPUで同時に実行することはできません)

R. Pateが言ったように、Pythonのmultiprocessingモジュールは一方向です。ただし、代わりにParallelPythonを検討することをお勧めします。タスクの分散とメッセージパッシングを処理します。コードをほとんど変更せずに、多くの別々のコンピューターでタスクを実行することもできます。

使い方はとても簡単です。

import pp

def parallel_function(arg):
    return arg

job_server = pp.Server() 

# Define your jobs
job1 = job_server.submit(parallel_function, ("foo",))
job2 = job_server.submit(parallel_function, ("bar",))

# Compute and retrieve answers for the jobs.
print job1()
print job2()
于 2009-11-16T16:42:55.877 に答える
25

マルチプロセッシングモジュールを試してみてください。Pythonには実際のネイティブスレッドがありますが、GILが保持されている間は同時使用が制限されます。もう1つの方法、そして実際の速度が必要な場合に確認する必要があるのは、C拡張モジュールを作成し、Pythonからその中で関数を呼び出すことです。これらのC関数でGILを解放できます。

DavidBeazleyMindblowingGILも参照してください。

于 2009-11-16T16:36:11.100 に答える
12

グローバルインタプリタロック

このようなロックを使用する理由は次のとおりです。

* increased speed of single-threaded programs (no necessity to acquire or release locks
  on all data structures separately)
* easy integration of C libraries that usually are not thread-safe.

GILを使用して言語で記述されたアプリケーションは、各インタープリターが独自のGILを持っているため、完全な同時実行性を実現するために個別のプロセス(つまりインタープリター)を使用する必要があります。

于 2009-11-16T16:44:30.007 に答える
1

CPU使用率からは、まだシングルコアで実行しているように見えます。同じスレッドコードで3つ以上のスレッドを使用して簡単な計算を実行し、すべてのコアを利用しているかどうかを確認してください。そうでない場合は、スレッドコードに問題がある可能性があります。

于 2009-11-16T16:40:27.923 に答える
1

Stackless Pythonはどうですか?

于 2009-11-16T16:51:10.727 に答える
0

ボトルネックは、ハードドライブ(ページング)やメモリアクセスなど、おそらく別の場所にあります。

于 2009-11-16T16:35:12.740 に答える
0

ボトルネックがどこにあるかを判断するには、オペレーティングシステムとPythonの監視を実行する必要があります。

Windows7の情報は次のとおりです。

パフォーマンスモニター:Windowsパフォーマンスモニターを使用して、実行するプログラムがコンピューターのパフォーマンスにどのように影響するかを、リアルタイムで、および後で分析するためにログデータを収集することによって調べることができます。([コントロールパネル]->[すべてのコントロールパネル項目]->[パフォーマンス情報とツール]->[高度なツール]->[パフォーマンスモニターの表示])

リソースモニター:Windowsリソースモニターは、ハードウェア(CPU、メモリ、ディスク、ネットワーク)およびソフトウェア(ファイルハンドルとモジュール)のリソースの使用に関する情報をリアルタイムで表示できるシステムツールです。Resource Monitorを使用して、プロセスとサービスを開始、停止、一時停止、および再開できます。([コントロールパネル]->[すべてのコントロールパネル項目]->[パフォーマンス情報とツール]->[高度なツール]->[リソースモニターの表示]

于 2009-11-16T16:43:44.703 に答える
0

2番目のスクリプトを手動で実行することで、この投稿につながる問題を解決しました。この投稿は、複数のPythonスクリプトを同時に実行するのに役立ちました。

新しく開いたターミナルウィンドウでコマンドを入力して実行することができました。シフト+エンターほど便利ではありませんが、仕事をします。

于 2022-01-11T11:35:47.560 に答える