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

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

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

現在、誰かが並列化された Python コード (と聞いています) を実行しています。ただし、topPython コードが CPU の 400% を使用していると表示されるのではなく、それぞれが独自のプロセッサ (100%) を使用している 4 つの異なるプロセスとして表示されます。

疑問に思うのは、Python (並列化されている場合) はtop(C とは対照的に) 多くの異なるプロセスが実行されていることが示されるのか、それともこの Python コードは実際には並列で実行されていないのかということです。

この質問に対して Stack Exchange の方が適しているかどうかはわかりません。私は使用しているため、topこの場所のほうが適していると思いました。移動する必要がある場合はお知らせください。

答え1

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

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

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

答え2

Pythonのリファレンス実装であるCPythonには、グローバルインタプリタロック(GIL)があり、平行、 のみ同時にスレッドは I/O にのみ役立ちます。並列で実行するには複数のプロセスが必要です。ご覧になっている C コードでは、並列処理にスレッドが使用されている可能性があります。

関連情報