仅使用12%CPU能力的Python解释器


26

我在ubuntu上使用python进行文本分析。尽管工作量很大,程序仍在处理CPU使用率,如系统监视器中所示,该值始终保持在12%。

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

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

Answers:


73

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

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

仅当您的Python程序使用multiprocessing时,实际上启动了Python解释器的多个实例并使它们真正并行地执行您的任务,您才可以利用多个虚拟核/ CPU线程。(正如@SargeBorsch在他的评论中指出的那样,也有一些高级方法无需多处理即可实现这一目标,但这通常不是您快速编写自己的东西。)


这实际上很有意义。是的,我有一个具有4个核心(8个虚拟核心)的四核。Ty
Matthias Herrmann

9
@MatthiasHerrmann您可以考虑使用系统监视器来显示每个CPU的运行百分比。这样,您可以看到8个CPU中只有1个处于100%状态。这是有关该主题的AU中的一个线程:Windows“ gadgets”等效项(用于wifi和cpu)?
WinEunuuchs2Unix

7
并非如此,可以使用来自单个python进程的所有内核就可以了。只需调用C代码并释放GIL。许多现有的库正是这样做的(例如numpy)。
Sarge Borsch,

2
或者使用Jython或者IronPython,它没有GIL。
停止危害莫妮卡

19

在这种情况下,不太可能的另一种可能性是该程序是磁盘绑定的,即它正在对磁盘进行读写操作很慢,并且CPU正在等待磁盘。


5
尝试iotop监视绑定到iowait的程序

1
或者代码本身是同步的和阻塞的。
Zydnar

那是我的错误,非常感谢
Fipsi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.