Python多处理只使用3个内核,总共130%的CPU?
我的机器上有24个内核,但我无法让它们全部运行。当IPython多处理只使用3个内核,总共130%的CPU?,python,Python,我的机器上有24个内核,但我无法让它们全部运行。当Itop时,只有3个进程正在运行,通常只有一个进程达到100%的CPU,另外两个进程达到30% 我已经阅读了这个网站上所有的相关文章,但仍然无法找出我的代码出了什么问题 我如何使用pool的伪代码如下 import multiprocessing as mp def Foo(): pool = mp.Pool(mp.cpu_count()) def myCallbackFun(): pool.map(myFunc
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?使用多处理Python启动新进程。像你这样的脚本会无限分叉。您需要像这样包装模块的脚本部分:
import multiprocessing as mp
if __name__ == '__main__':
pool = mp.Pool(24)
pool.map(myFunc_wrapper, myArgs)
给未来的读者--
正如@mata正确指出的那样
如果涉及到的参数太多,您可能会遇到IO瓶颈
它们很大
这确实是我的情况。尽量减少传递给每个进程的参数的大小。
pool=mp.pool(24)
和pool.map(myFunc\u包装,myArgs)
应该这样做如果uuu name uuu=='\uuuu main uu':这样你的脚本就不会无限分叉。如果看不到真实代码的相关部分,就不可能说太多。如果所涉及的参数非常复杂,则可能会遇到IO瓶颈big@mata事实上,这是由于IO瓶颈造成的。当我尽力减少传递的参数时,我可以充分利用我的核心。非常感谢!在实际代码中,pool=mp.pool(mp.cpu\u count())
实际上是在一个函数中调用的,因此如果中的,则它实际上不在中。这就是问题所在吗?只有当您的代码中有脚本部分时。如果您的所有代码都包装在函数中,那么这不应该是一个问题。你应该改变你的例子。我明白了,你在哪里调用Foo()?调用树是这样的:`if name=='main':`callsmain()
,它调用Bar()
,它调用Foo()
。你是否缺少下划线\u name\u
和\u main\u>
?