2017-04-11 44 views
-1

我有一個任務要處理大量的數據行(在pandasDataFrame),但每個計算都是獨立的,因此我想將其並行化。在一個numpy數組中同時寫入

所以我有一個函數連續服用,並輸出一個對象(輸出中實際上是包含字符串和一組陣列)。

def compute_row(index, row, output):  
    output[index] = some_function(row) 

然後我嘗試並行使用它。

output = np.empty(data_length, dtype=object) 

num_cores = multiprocessing.cpu_count() 
Parallel(n_jobs=num_cores)(delayed(compute_row)(i, row, outputx) for i, row in db.iterrows()) 

的問題是,我回來的None數組,即使我通過1例如更換some_function

由於索引是唯一的,所以不應該有任何併發​​的內存訪問問題。我在這裏錯過了什麼?我應該使用另一個數據結構嗎?

提前致謝!

+0

輸出是'None'數組,因爲'compute_row'方法應該返回一些東西。你爲什麼不'只返回some_function(row)'? –

回答

0

好吧, 我找到了另一種方式,使用Pool對象。

from multiprocessing import Pool 

def compute_row(row):  
    return some_function(row) 

pool = Pool() 
output = pool.map(compute_row, (row for i, row in db.iterrows())) 
相關問題