我使用Python编写了一段非常耗时的代码(包含大量递归)。我正在测试代码的运行时,我注意到无论代码有多复杂,Python都不会消耗我CPU的全部计算能力。我在Windows7上使用Intel双核运行Python,而Python从不使用超过1个CPU。基本上一个CPU正在运行而另一个CPU处于空闲状态。
有人可以解释一下后台发生了什么吗?提前谢谢!
答案 0 :(得分:6)
您的脚本在单个进程中运行,因此在单个处理器上运行。 Windows调度程序可能会经常将它从一个核心移动到另一个核心,但它不能一次在多个位置运行单个进程。
如果您想要使用更多的CPU咕噜声,您需要弄清楚如何分割工作负载,以便在多个进程中运行代码的多个实例。
答案 1 :(得分:2)
如果python应用程序不是多线程的,那么它将不会使用超过1个cpu核心来执行。
答案 2 :(得分:2)
实际上,多线程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()