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

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

共有クラスタで作業しています。私はこのクラスタで並列化されたCコードを実行している人を見たことがあり、top実行中のプロセスを見るとCPUの400%を使用することがわかりました。なぜなら、彼らはコードの単一のインスタンスに4つのプロセッサを使用していたからです。

今、誰かが(私が知っている限り)並列化されたPythonコードを実行しています。しかし、PythonコードはtopCPUの400%を使用しているようには見えず、むしろそれぞれ独自のプロセッサ(100%)を使用する4つの異なるプロセスとして表示されます。

topPython(並列化されたとき)がCとは異なり、さまざまなプロセスで実行されているように見えるのか、このPythonコードが実際に並列で実行されていないのか疑問に思います。

この問題を解決するために Stack Exchange がより良い場所かどうかはわかりません。利用しているのでtopここがもっと良さそうだと思いました。移動すべきか教えてください。

ベストアンサー1

Cで見られるのはスレッドの使用量なので、プロセス使用量はすべてのスレッドの合計です。 4つのスレッドがあり、各スレッドのCPU使用率が100%の場合、プロセスは400%で表示されます。

Pythonで見ることができるのは、マルチプロセスモデルによって達成された並列性であることはほぼ確実です。これはPythonのスレッド制限を克服するために設計されたモデルです。 Pythonは一度に1つのスレッドしか実行できません(Pythonグローバルソルバーロック - GILを参照)。より良い結果を得るには、psで複数のプロセスとして表されるスレッドの代わりにプロセスを生成するマルチプロセスモジュールを使用できます。その後、各プロセスはすべて単一のプロセススレッドであるため、CPUの最大100%を使用できます。

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

おすすめ記事