我试图在python中并行化一些代码。在串行运行我的代码需要大约24小时,但是,有一个for循环,其中每次迭代独立于前一次迭代,因此这是并行化的理想情况。我试图用我的代码实现的一个简单示例如下,
import scipy as sci
from multiprocessing import Pool
def mycode(args):
for x in range(0,2000)
y = sci.fft(data[x,:],axis=1)
output[x,:]=y
return output
if __name__=="__main__":
pool=Pool(processes = 8)
output= pool.map(mycode(args),2000)
然而,从顶部看,我可以看到虽然python生成了9个python进程,但只有一个实际上使用了任何CPU能力或内存。所有其他人都是0%。使用带有for循环的Pool的正确方法是什么?
答案 0 :(得分:1)
只要此数据变量已定义为全局,这应该可以。
import scipy as sci
from multiprocessing import Pool
def mycode(x):
y = sci.fft(data[x,:],axis=1)
return y
if __name__=="__main__":
pool=Pool(processes = 8)
output= pool.map(mycode,range(2000))