web-dev-qa-db-ja.com

並列化されたPythonプログラムはtopコマンドでどのように見えますか?

私は共有クラスターで作業しています。このクラスターで並列化されたcコードを実行している人を見たことがあります。これは、topを使用して実行中のプロセスを確認すると、4つを使用しているため(たとえば)CPUの400%を使用していることが示されます。コードの単一インスタンス用のプロセッサ。

今、誰かが並列化されたPythonコードを実行しています(私が聞いていることです)。ただし、topがPythonコードをCPUの400%を使用していることを示す代わりに、それぞれが独自のプロセッサ(100%)を使用している4つの異なるプロセスとして示されています。

Python(並列化されている場合)はtopで(Cではなく)多くの異なるプロセスを実行していると表示されますか、それともこのPythonコードは実際には実行されていませんか並行して?

StackExchangeがこの質問に適しているかどうかはわかりません。 topを使用しているので、この場所の方が良いと思いました。移動する必要があるかどうか教えてください。

3
NeutronStar

Cに表示されるのはスレッドを使用しているため、プロセスの使用量はそのすべてのスレッドの合計です。それぞれ100%のCPU使用率を持つ4つのスレッドがある場合、プロセスは400%と表示されます

pythonは、ほぼ確実にマルチプロセスモデルによる並列処理です。これは、Pythonのスレッド制限を克服することを目的としたモデルです。Pythonは、で1つのスレッドしか実行できません。時間(Pythonグローバルインタープリターロック-GILを参照)。それ以上のことを行うには、スレッドの代わりにプロセスを作成するマルチプロセスモジュールを使用できます。これは、psで表示されます。複数のプロセスとして、(それぞれ)シングルスレッドであるため、それぞれ最大100%のCPUを使用できます。

ps -afeTを実行すると、Cプログラムのスレッドは表示されますが、pythonプログラムの追加のスレッドは表示されません。

5
V13

参照Python実装、CPythonには、グローバルインタープリターロック(GIL)があり、並列でのみコードを実行できません同時に 。スレッド化はI/Oにのみ役立ちます。並列で実行するには複数のプロセスが必要です。見ているCコードは、代わりに並列処理にスレッド化を使用している可能性があります。

3
pilona