并行化的 Python 程序如何使用 top 命令?

Neu*_*tar 3 c top python parallelism

我在共享集群上工作。我见过有人在这个集群上运行并行化的 c 代码,当我top用来查看正在运行的进程时,显示使用(例如)400% 的 CPU,因为他们使用四个处理器来处理单个实例他们的代码。

现在有人正在运行(我听说是)并行化的 Python 代码。然而,topPython 代码并未显示使用 400% 的 CPU,而是显示为四个不同的进程,每个进程使用自己的处理器(100%)。

我想知道,Python(并行化时)是否显示top运行的不同进程(与 C 相对)一样多,还是该 Python 代码实际上并未并行运行?

我不知道 Stack Exchange 是否是这个问题的一个更好的地方。由于我正在使用,top我认为这个地方会更好。让我知道我是否应该移动它。

V13*_*V13 5

您在 C 中看到的是使用线程,因此进程使用量是其所有线程的总和。如果有 4 个线程,每个线程的 CPU 使用率为 100%,则进程将显示为 400%

您在 python 中看到的几乎可以肯定是通过多进程模型实现的并行性。这是一个旨在克服 Python 线程限制的模型。Python 一次只能运行一个线程(参见 Python Global Interpreter Lock - GIL)。为了做得更好,可以使用多进程模块,该模块最终创建进程而不是线程,这反过来在 ps 中显示为多个进程,然后每个进程最多可以使用 100% CPU,因为它们(每个)是单个的 -螺纹。

我敢打赌,如果您运行,ps -afeT您将看到 C 程序的线程,但不会看到 Python 程序的其他线程。