Python和CPU使用率

3
我使用Python编写了一段代码,其中包含许多递归操作,因此非常耗时。我正在测试代码的运行时间,但无论代码变得多么复杂,Python都没有使用我的CPU的全部计算能力。我在Windows7上使用Intel Dual Core运行Python,Python从未使用过1个以上的CPU,基本上一个CPU在运行,而另一个CPU处于空闲状态。
有人可以解释一下背后发生了什么吗?谢谢!

1
请参考:http://zh.wikipedia.org/wiki/%E5%A4%9A%E8%BF%9B%E7%A8%8B。 - underbar
这个问题应该有一个常见问题解答,每个人都会问到它。 - Wug
3个回答

6

您的脚本运行在单个进程中,因此只能在单个处理器上运行。Windows调度程序可能会经常将其从一个核心移动到另一个核心,但它无法同时在多个位置运行单个进程。

如果您想要使用更多的CPU资源,您需要找到一种方法来拆分工作负载,以便可以在多个进程中运行代码的多个实例。


3

实际上,一个多线程的Python应用程序无法充分利用CPU的多个核心。这是因为Python使用了一种叫做“全局解释器锁”(GIL)的机制。在你的Python实例中,所有代码都必须获得此锁,这意味着在你的Python应用程序中,即使你有多个处理器并且正在进行多线程操作,也只能执行一个代码线程。

不过,如果你使用multiprocessing模块,就可以使用多个核心:

import multiprocessing

def run():
    x = 1+1
    save(x)

if __name__=="__main__":
    for i in range(100):
        p = multiprocessing.Process(target=run)
        p.start()

2

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


2
值得注意的是,Python 的多线程相对较为有限,并且无法很好地扩展(至少对于基于 C 的 Python 引擎而言)。 - Henk Langeveld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接