3

我使用 Python 编写了一段非常耗时的代码(包含大量递归)。我正在测试代码的运行时,我注意到无论代码变得多么复杂,Python 都不会消耗我 CPU 的全部计算能力。我在带有 Intel Dual Core 的 Windows7 上运行 Python,而 Python 从不使用超过 1 个 CPU。基本上一个 CPU 正在运行,而另一个 CPU 处于空闲状态。

有人可以解释一下背景中发生的事情吗?提前致谢!

4

3 回答 3

6

您的脚本在单个进程中运行,因此在单个处理器上运行。Windows 调度程序可能会非常频繁地将其从一个核心移动到另一个核心,但它不能一次在多个地方运行单个进程。

如果您想使用更多的 CPU 资源,则需要弄清楚如何拆分工作负载,以便可以在多个进程中运行代码的多个实例。

于 2012-08-03T20:02:44.413 回答
3

实际上,多线程 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()
于 2012-08-03T21:23:45.637 回答
2

如果您的 python 应用程序不是多线程的,则它不会使用超过 1 个 CPU 内核来执行。

于 2012-08-03T20:01:59.303 回答