我使用Python编写了一段代码,其中包含许多递归操作,因此非常耗时。我正在测试代码的运行时间,但无论代码变得多么复杂,Python都没有使用我的CPU的全部计算能力。我在Windows7上使用Intel Dual Core运行Python,Python从未使用过1个以上的CPU,基本上一个CPU在运行,而另一个CPU处于空闲状态。
有人可以解释一下背后发生了什么吗?谢谢!
有人可以解释一下背后发生了什么吗?谢谢!
您的脚本运行在单个进程中,因此只能在单个处理器上运行。Windows调度程序可能会经常将其从一个核心移动到另一个核心,但它无法同时在多个位置运行单个进程。
如果您想要使用更多的CPU资源,您需要找到一种方法来拆分工作负载,以便可以在多个进程中运行代码的多个实例。
实际上,一个多线程的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()
如果您的 Python 应用程序不是多线程的,则不会使用超过 CPU 的 1 个核心来执行。