为什么我的 Python 程序平均每个进程只有 33% 的 CPU?如何让 Python 使用所有可用的 CPU?

新手上路,请多包涵

我使用 Python 2.5.4。我的电脑:CPU AMD Phenom X3 720BE,主板 780G,4GB RAM,Windows 7 32 位。

我使用 Python 线程但不能使每个 python.exe 进程消耗 100% CPU。为什么他们平均只使用大约 33-34%?

我希望将所有可用的计算机资源用于这些大型计算,以便尽快完成它们。

编辑:谢谢大家。现在我正在使用 Parallel Python,一切正常。我的 CPU 现在总是 100%。谢谢大家!

原文由 Anh Pham 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
2 个回答

看来你有一个 3 核 CPU。如果您想在本机 Python 代码中使用多个 CPU 内核,则必须生成多个进程。 (两个或多个 Python 线程不能在不同的 CPU 上并发运行)

正如 R. Pate 所说,Python 的 multiprocessing 模块是一种方式。但是,我建议改为查看 Parallel Python 。它负责分发任务和消息传递。您甚至可以在 多台单独的计算机 上运行任务,而无需对代码进行少量更改。

使用它非常简单:

 import pp

def parallel_function(arg):
    return arg

job_server = pp.Server()

# Define your jobs
job1 = job_server.submit(parallel_function, ("foo",))
job2 = job_server.submit(parallel_function, ("bar",))

# Compute and retrieve answers for the jobs.
print job1()
print job2()

原文由 intgr 发布,翻译遵循 CC BY-SA 2.5 许可协议

尝试使用 multiprocessing 模块,因为 Python 虽然它具有真实的本地线程,但会在 GIL 保留时限制它们的并发使用。另一种选择是编写 C 扩展模块并从 Python 调用其中的函数,如果您需要 真正的 速度,您应该考虑一下。您可以在这些 C 函数中释放 GIL。

另请参阅 David BeazleyMindblowing GIL

原文由 Roger Pate 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题