我在Ubuntu上使用Python进行文本分析。尽管程序在进行大量工作,但系统监视器显示的CPU使用率始终保持在12%。
我将程序的优先级从“普通”改为“非常高”,但没有效果。
是什么限制了我的Python程序可以获得的CPU使用率,并且我如何更改以便程序可以利用更多的CPU计算能力?
我将程序的优先级从“普通”改为“非常高”,但没有效果。
是什么限制了我的Python程序可以获得的CPU使用率,并且我如何更改以便程序可以利用更多的CPU计算能力?
我假设你有一个带有8个虚拟核心的CPU(可能是四核超线程)?这意味着一个完全负载的CPU线程/虚拟核心等于总负载的12.5%。
Python解释器默认情况下只作为一个单一进程运行的应用程序,因此不能利用多个虚拟核心。即使您使用它运行的代码使用了多线程,由于全局解释器锁(GIL (global interpreter lock)),它仍然只使用一个CPU线程/虚拟核心。
只有当您的Python程序使用multiprocessing时,实际上启动多个Python解释器实例并让它们真正并行执行任务时,您才能充分利用多个虚拟核心/CPU线程。(正如@SargeBorsch在他的评论中指出的那样,也有一些高级方法可以在没有多进程的情况下实现这一点,但通常不是您自己快速编写的东西。)
iotop
来监控与I/O等待相关的程序。 - cat
Jython
或IronPython
,它们没有全局解释器锁(GIL)。 - OrangeDog