0

這是我第一次嘗試在Python中使用多處理。我試圖通過行在我的數據框df上並行化我的功能fun。回調函數只是將結果追加到一個空列表中,稍後我將對其進行排序。我正確使用python的apply_async嗎?

這是正確的使用方法apply_async?非常感謝。

import multiprocessing as mp 

function_results = [] 
async_results = [] 

p = mp.Pool() # by default should use number of processors 

for row in df.iterrows(): 
    r = p.apply_async(fun, (row,), callback=function_results.extend) 
    async_results.append(r) 

for r in async_results: 
    r.wait() 

p.close() 
p.join() 

回答

1

它看起來像使用mapimap_unordered(dependending你是否需要你的結果進行排序或不)會更好地滿足您的需求

import multiprocessing as mp 

#prepare stuff 

if __name__=="__main__": 

    p = mp.Pool() 

    function_results = list(p.imap_unorderd(fun,df.iterrows())) #unordered 
    #function_results = p.map(fun,df.iterrows()) #ordered 

    p.close() 
+0

感謝您的答覆 - 任何特別的原因'地圖'或'imap'比較好? – user3058197

+1

速度可能有所不同,但我沒有測試過。 imap和imap_unordered可以更快地返回它們的第一個結果,並且不需要一次完成在內存中的完整輸出 - 如果您只是要遍歷它,這可能很有趣。 – janbrohl