2013-11-25 107 views
0

我試圖在python中並行化一些代碼。以串行方式運行我的代碼需要大約24小時,但是,有一個for循環,每次迭代都獨立於前一次迭代,因此這是並行化的理想情況。什麼,我想實現我的代碼如下:一個簡單的例子,並行python 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) 

然而,看着上面,我可以看到,雖然蟒蛇產生9點蟒蛇的過程中,只有一個被實際使用任何CPU電源或記憶。所有其他人都在0%。使用for循環使用Pool的正確方法是什麼?

+5

什麼是「重建」功能?它是否返回一個可調用的?爲什麼'pool.map'的第二個參數是一個數字(2000),而不是可迭代的?爲什麼在你的例子中有一個'mycode'函數,如果它從未被調用? –

+0

與可迭代的爭論2000年它將只使用1個進程。 –

回答

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))