我有一个相当内存昂贵的Python程序,可以在拥有8个CPU的计算机上运行(使用Python 3.1 64位)。问题是它使用所有8个处理器来达到100%的使用率,从而冻结机器并使事情变得缓慢。我如何让Python只使用7个处理器来释放更多的CPU?我已多次在多处理库中试验过Pool类,但没有运气。
例如,如果我想调用我的程序的主要功能并且只使用7个处理器,那么我需要做的就是以下内容,但没有运气:
来自多处理导入池 游泳池(7,主())
有谁能告诉我哪里出错了?谢谢!
答案 0 :(得分:2)
我遇到了同样的问题,我通过向游泳池分配少一个来解决这个问题:
pool= multiprocessing.Pool(processes=(multiprocessing.cpu_count() - 1))
通过执行此操作并让您的池仅使用CPU-1,您可以为PC节省一些额外的电量。 这对我的Windows机器有很大的帮助,所以我仍然可以点击其他应用程序(W7 64位)。在Linux上,无论哪种方式,机器都可以。
答案 1 :(得分:0)
你以某种方式创造了很多流程。这可以通过
os.system()
,os.popen*()
,os.spawn*()
或popen2
,subprocess
和multiprocessing
库中的方法。
如果你没有使用CPython而是使用其他Python实现,例如Jython或Stackless,你也可以通过线程使用多个内核。
你必须弄清楚你在做什么导致了这一点,然后确保你不会同时做超过7个。
答案 2 :(得分:0)
我不太确定你的情况,但有一件事可能对你有用,就是找出你拥有的核心数量(在python中你可以使用multiprocessing库),然后限制数量程序创建的线程/进程数少于此数字的一个。