我的机器上有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名工人。
但是当我恢复程序时,top
告诉我,我只有三个Python进程在运行。另一件事是,当我ctrl-c
终止我的程序时,它有很多工人打断(例如,PoolWorker-367
) - 我按ctrl-c
几分钟,但仍有那里的工人。难道不应该只有24名工人吗?
如何让我的程序使用所有CPU?
答案 0 :(得分:1)
通过多处理,Python启动新进程。使用像你这样的脚本,它将无限分叉。您需要像这样包装模块的脚本部分:
import multiprocessing as mp
if __name__ == '__main__':
pool = mp.Pool(24)
pool.map(myFunc_wrapper, myArgs)
答案 1 :(得分:0)
对于未来的读者 -
正如@mata正确指出的那样,
如果您参与其中,您可能会遇到IO瓶颈 非常大
这确实是我的情况。尽量减少传递给每个进程的参数的大小。