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

Alo*_*oad 11 python performance process cpu-usage multiprocessing

我使用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%.谢谢大家!

int*_*tgr 34

看来你有一个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()
Run Code Online (Sandbox Code Playgroud)


小智 25

尝试多处理模块,就像Python一样,虽然它有真正的本机线程,但在GIL被保持时会限制它们的并发使用.另一种选择,如果你需要真正的速度,你应该看一下,就是编写C扩展模块并从Python中调用函数.您可以在这些C函数中释放GIL.

另见David BeazleyMindblowing GIL.


Siv*_*vvy 11

全球口译员锁

使用这种锁的原因包括:

* increased speed of single-threaded programs (no necessity to acquire or release locks
  on all data structures separately)
* easy integration of C libraries that usually are not thread-safe.
Run Code Online (Sandbox Code Playgroud)

用GIL语言编写的应用程序必须使用单独的进程(即解释器)来实现完全并发,因为每个解释器都有自己的GIL.

  • 将鼠标悬停在向上/向下投票箭头上时,alt文本清晰显示:"此答案很有用/无用".很明显,很多SO用户似乎都在读"我喜欢这个答案/我不喜欢这个答案,这个人应该死于可怕的死亡",而是投票.如果我不得不给出一个答案,我会拒绝回答nicholaides的答案,但我不能,因为他是对的微不足道的机会(尽管我坚信他不是). (2认同)