2016-10-21 58 views
4

我使用類似於下面通過兩個矩陣Python中,並行與JOBLIB:延遲與多個參數

from joblib import Parallel, delayed 
import numpy 

def processInput(i,j): 
    for k in range(len(i)): 
     i[k] = 1 
    for t in range(len(b)): 
     j[t] = 0 
return i,j 

a = numpy.eye(3) 
b = numpy.eye(3) 

num_cores = 2 
(a,b) = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b)) 

並行for循環,但我發現了以下錯誤的東西:太多值解壓(預計2)

有沒有辦法返回2個值與延遲?或者你會提出什麼解決方案?另外,有點OP,有沒有一種更緊湊的方式,像下面(它實際上沒有修改任何東西)來處理矩陣?

from joblib import Parallel, delayed 
def processInput(i,j): 
    for k in i: 
     k = 1 
    for t in b: 
     t = 0 
return i,j 

我想避免使用has_shareable_memory反正,以避免在實際腳本可能不良的相互作用和較低的性能(?)

回答

3

可能爲時已晚,但作爲一個答案的第一部分你的問題: 只需在你的延遲函數中返回一個元組。

return (i,j) 

而對於變量保存的所有延遲功能

results = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b)) 

現在產生的輸出爲各持有一些(I,J)元組列表,你可以通過結果只是重複。