在进程池python中排序

时间:2017-06-29 16:36:50

标签: python-3.x multiprocessing python-multiprocessing

我试图从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内部数组的顺序返回?

2 个答案:

答案 0 :(得分:2)

Pool.starmap(和Pool.map)将按照传递给它们的参数的顺序返回值 - 但这并不意味着它们将按顺序运行。如果您不关心订单,并且无序结果(可能性能更高),则可以Pool.imap_unordered

请参阅the documentation

答案 1 :(得分:1)

无法保证它们的顺序相同,因为最终操作系统会处理调度进程。它们可能会以相同的顺序结束,如果您在chunksize中将starmap()设置为1,则可能会增加它的可能性。否则,最多结果将按执行顺序按块大小分组。

如果你之后需要知道原始的顺序,我使用的技巧就是传入一个只是由工作函数重新发出的索引(或者对于n维数据的numpy.ndindex)。 / p>