2017-06-29 74 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),该索引仅由工作函数重新发送。