Python多处理只使用3个内核,总共130%的CPU?

时间:2017-03-08 06:42:09

标签: python

我的机器上有24个核心,但我无法让它们全部运行。当我top时,只有3个进程正在运行,通常只有一个进程达到100%CPU,另外两个运行达到~30%。

我已阅读本网站上的所有相关主题,但仍无法弄清楚我的代码有什么问题。

我使用pool的方式的伪代码如下

import multiprocessing as mp

def Foo():
    pool = mp.Pool(mp.cpu_count())
    def myCallbackFun():
        pool.map(myFunc_wrapper, myArgs)
    optimization(callback=myCallbackFun) # scipy optimization that has a callback function.

使用pdb,我在optimization之前停止了,并检查了我确实有24名工人。

enter image description here

但是当我恢复程序时,top告诉我,我只有三个Python进程在运行。另一件事是,当我ctrl-c终止我的程序时,它有很多工人打断(例如,PoolWorker-367) - 我按ctrl-c几分钟,但仍有那里的工人。难道不应该只有24名工人吗?

如何让我的程序使用所有CPU?

2 个答案:

答案 0 :(得分:1)

通过多处理,Python启动新进程。使用像你这样的脚本,它将无限分叉。您需要像这样包装模块的脚本部分:

import multiprocessing as mp

if __name__ == '__main__':
    pool = mp.Pool(24)
    pool.map(myFunc_wrapper, myArgs)

答案 1 :(得分:0)

对于未来的读者 -

正如@mata正确指出的那样,

  

如果您参与其中,您可能会遇到IO瓶颈   非常大

这确实是我的情况。尽量减少传递给每个进程的参数的大小。