2014-10-10 36 views
1

請注意如何在Python中使用多處理時保持順序。 func和somefunc都返回列表。謝謝,在Python中使用多處理時保持順序

results = [] 

def callback(*args): results.append(*args) 

def in_parallel(fn, func): 
    print 'Process started on',time.strftime('%H:%M:%S') 
    pool = mp.Pool(processes = 4) 
    for num, i in enumerate(somefunc(fn)): 
     pool.apply_async(func, args = (i,), callback = callback([num, callback])) 
    pool.close() 
    pool.join() 

    return results 
+0

當你說「維持秩序」你希望保持results'的'基於時間的計算是訂貨完成或別的什麼? – shuttle87 2014-10-10 13:49:40

+0

不,我想保持由somefunc返回的輸入列表的順序 – user1192422 2014-10-10 14:06:34

+0

你真的想要'callback' kwarg做什麼?現在你只要在調用apply_async後立即追加'num',然後將'callback'函數對象追加到'results',然後將'callback'關鍵字參數賦值給'result.append的返回值'電話,這是'沒有'。這絕對不是你想要做的。 – dano 2014-10-10 14:17:18

回答

1

的問題已經解決了以下內容:

r = pool.map_async(...) 
    r.wait()