Python 解释器仅使用 12% 的 CPU 功率

Mat*_*ann 26 python cpu

我在 ubuntu 上使用 python 进行文本分析。尽管程序进行了大量工作,但系统监视器中显示的 CPU 使用率始终保持在 12%。

我将程序的优先级从 更改为NormalVery High但没有任何效果。

什么限制了我的 python 程序可以获得的 CPU 使用量,我该如何改变它,以便程序可以利用更多的 CPU 能力?

Byt*_*der 74

我假设您有一个带有 8 个虚拟内核的 CPU(可能是带有超线程的四核)?这意味着一个满载的 CPU 线程/虚拟内核等于 12.5% 的总负载。

Python 解释器是一种默认情况下仅作为单个进程运行的应用程序,因此无法利用多个虚拟内核。即使您使用它运行的代码使用多线程,由于GIL(全局解释器锁),它仍然只会使用一个 CPU 线程/虚拟内核。

只有当您的 Python 程序使用multiprocessing,它实际上启动了 Python 解释器的多个实例并让它们真正并行执行您的任务时,您才能利用多个虚拟内核/CPU 线程。(正如@SargeBorsch 在他的评论中指出的那样,还有一些高级方法可以在不进行多处理的情况下实现这一点,但这通常不是您自己快速编写的内容。)

  • @MatthiasHerrmann 您可以考虑使用系统监视器来显示每个 CPU 的运行百分比。这样你就可以看到 8 个 CPU 中只有 1 个是 100%。这是 AU 中关于该主题的一个主题:[Windows“gadgets”等价物(用于 wifi 和 cpu 使用)?](https://askubuntu.com/questions/895364/windows-gadgets-equivalent-for-wifi-and- cpu 使用率/895485#895485) (9认同)
  • 不正确,可以很好地使用来自单个 python 进程的所有内核。只需调用 C 代码并释放 GIL。许多现有的库就是这样做的(例如 numpy)。 (7认同)
  • 或者使用没有 GIL 的 `Jython` 或 `IronPython`。 (2认同)

小智 19

在这种情况下不太可能的另一种可能性是程序受磁盘限制,即它正在缓慢地向/从磁盘读取和写入,并且 CPU 正在等待磁盘。

  • 尝试使用 `iotop` 来监控绑定到 iowait 的程序 (5认同)