如何增加 Python 的 CPU 使用率

24 cpu-usage python

我使用 Python 来执行一些算法,无论我使用哪种 Python,并且我尝试了很多版本,CPU 使用率最高可达 25%。为什么 Python 不利用我剩余的 CPU 资源?我将服务的优先级从正常更改为高,然后更改为实时,中间重新启动,但没有任何改变。

有没有办法让 Python 使用我的 CPU 的 50% 甚至更多?

Jou*_*eek 20

很简单,您在具有 4 个逻辑核心的系统中运行单线程应用程序 - 因此,您有一个进程,使用所有核心。

您将(这很重要)需要将算法重写为多线程,或者查看是否可以在特定内核上运行 2 个或更多实例以使用更多 CPU。没有别的办法。

  • 您的系统正在平衡内核之间的负载。尽管如此,并没有同时使用两个内核。 (2认同)

Rol*_*ith 16

Python 语言出现在多核 CPU 之前,因此它本身不使用它们并不奇怪。

此外,并非所有程序都可以从多核中获益。分步完成的计算,其中下一步取决于上一步的结果,使用更多内核不会更快。可以向量化的问题(对大型数据数组应用相同的计算)可以相对容易地使用多个内核,因为各个计算是独立的。

当您进行大量计算时,我假设您使用的是numpy?如果没有,请检查一下。它是用 C 编写的扩展,可以使用优化的线性代数库,如 ATLAS。与标准 Python 相比,它可以显着加快数值计算。

话虽如此,有几种方法可以在python中使用多核。

  • 内置的是multiprocessing模块。本multiprocessing.Pool类提供跨越与多个CPU的矢量map()和相关方法。不过,这里有一个权衡。如果您必须在进程之间传输大量数据,那么这种开销可能会抵消多核的优势。
  • 使用合适的 numpy 构建。如果 numpy 是用多线程 ATLAS 库构建的,它在处理大问题时会更快。
  • 使用扩展模块,如numexprparallel pythoncorepy哥本哈根向量字节码

请注意,该threading模块在这方面并不是那么有用。为了保持内存管理简单,全局解释器锁(“GIL”)强制一次只有一个线程可以执行 python 字节码。不过,像 numpy 这样的外部模块可以在内部使用多个线程。