我使用 Python 编写了一段非常耗时的代码(包含大量递归)。我正在测试代码的运行时,我注意到无论代码变得多么复杂,Python 都不会消耗我 CPU 的全部计算能力。我在带有 Intel Dual Core 的 Windows7 上运行 Python,而 Python 从不使用超过 1 个 CPU。基本上一个 CPU 正在运行,而另一个 CPU 处于空闲状态。
有人可以解释一下背景中发生的事情吗?提前致谢!
您的脚本在单个进程中运行,因此在单个处理器上运行。Windows 调度程序可能会非常频繁地将其从一个核心移动到另一个核心,但它不能一次在多个地方运行单个进程。
如果您想使用更多的 CPU 资源,则需要弄清楚如何拆分工作负载,以便可以在多个进程中运行代码的多个实例。
实际上,多线程 Python 应用程序不足以使用超过 1 个 CPU 内核。Python 使用一种称为“全局解释器锁”(GIL) 的结构。您的 Python 实例中的所有代码都必须获得此锁,这意味着在您的 Python 应用程序中,即使您有多个处理器并且是多线程的,在任何给定时间点都只会执行一个代码线程
也就是说 - 如果您使用多处理模块,您可以使用多个核心:
import multiprocessing
def run():
x = 1+1
save(x)
if __name__=="__main__":
for i in range(100):
p = multiprocessing.Process(target=run)
p.start()
如果您的 python 应用程序不是多线程的,则它不会使用超过 1 个 CPU 内核来执行。