为什么我的Python程序每个进程只使用33%的CPU?如何让Python充分利用所有CPU?
我用的是Python 2.5.4。我的电脑配置是:CPU是AMD Phenom X3 720BE,主板是780G,内存4GB,操作系统是32位的Windows 7。
我在用Python的多线程功能,但我发现每个python.exe进程的CPU使用率都不能达到100%。为什么它们平均只使用了大约33-34%的CPU呢?
我希望能把所有可用的计算机资源都用在这些大计算上,以便尽快完成它们。
编辑:谢谢大家!现在我在使用Parallel Python,一切都运转得很好。我的CPU现在总是保持在100%使用率。谢谢大家!
8 个回答
12
使用这种锁的原因包括:
* 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.
用有全局解释器锁(GIL)语言写的应用程序,必须使用不同的进程(也就是解释器)来实现完全的并发,因为每个解释器都有自己的全局解释器锁。
25
可以试试 multiprocessing 模块。虽然Python有真正的线程,但在持有全局解释器锁(GIL)时,它会限制这些线程的同时使用。如果你需要更快的速度,可以考虑写一个C语言的扩展模块,然后从Python中调用它的函数。在这些C语言函数中,你可以释放GIL。
另外,建议看看David Beazley 的 Mindblowing GIL。
39
看起来你有一个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()