2017-06-29 72 views
0

我想從python中並行運行的進程返回結果。這是代碼。在進程池中排序python

from dateutil.parser import parse 
from multiprocessing.dummy import Pool 
from itertools import * 
import time 
import random 

def abcd(a): 
    time.sleep(a) 
    print(a) 
    return a 

p = Pool(3) 
a = p.starmap(abcd, zip([10, 2, 15])) 
p.close() 
p.join() 
print(a) 

結果總是以zip內數組的順序返回嗎?

回答

1

Pool.starmap(和Pool.map)將按照傳遞給它們的參數的順序返回值 - 但這並不意味着它們將按順序運行。如果您不關心訂單並且無序結果(以及潛在的更多性能),那麼有Pool.imap_unordered

請參閱the documentation

0

無法保證它們的順序相同,因爲操作系統最終會處理調度過程。它們可能以相同順序結束,如果您在starmap()中將chunksize設置爲1,則可能會增加該機會。否則,結果至多會按執行順序按塊大小分組。

如果您之後需要知道原始順序,我使用的技巧是隻傳入索引(或用於n維數據的numpy.ndindex),該索引僅由工作函數重新發送。