使用 top 指令時並行化的 Python 程式看起來如何?

使用 top 指令時並行化的 Python 程式看起來如何?

我在共享集群上工作。我見過人們在這個集群上運行並行化的 c 代碼,當我用來top查看正在運行的進程時,顯示使用了(例如)400% 的 CPU,因為他們為單個實例使用了四個處理器他們的代碼。

現在有人正在運行(據我所知)並行化的 Python 程式碼。然而,Python 程式碼並沒有top顯示使用 400% 的 CPU,而是顯示為四個不同的進程,每個進程都使用自己的處理器(100%)。

我想知道,Python(並行化時)是否顯示top運行盡可能多的不同進程(與 C 相反),或者該 Python 程式碼實際上並未並行運行?

我不知道 Stack Exchange 是否是解決這個問題的更好地方。因為我正在使用,所以top我認為這個地方會更好。讓我知道是否應該移動它。

答案1

你在 C 中看到的是使用線程,因此進程使用量是其所有線程的總和。如果有 4 個線程,每個線程的 CPU 使用率為 100%,則該進程將顯示為 400%

你在 python 中看到的幾乎肯定是透過多進程模型實現的平行性。這是一個旨在克服 Python 線程限制的模型。 Python 一次只能執行一個執行緒(請參閱 Python 全域解釋器鎖定 - GIL)。為了做得更好,可以使用多進程模組,它最終會創建進程而不是線程,而線程又在ps 中顯示為多個進程,然後每個進程可以使用高達100% 的CPU,因為它們都是單進程螺紋。

我敢打賭,如果您運行,ps -afeT您將看到 C 程式的線程,但看不到 python 程式的其他線程。

答案2

參考 Python 實作 CPython 具有全域解釋器鎖定 (GIL),這會阻止它在以下環境中運行程式碼:平行線, 僅有的同時。線程僅對 I/O 有用。您需要多個進程才能並行執行。您正在查看的 C 程式碼很可能使用執行緒來實現並行性。

相關內容