我试图从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内部数组的顺序返回?
答案 0 :(得分:2)
Pool.starmap
(和Pool.map
)将按照传递给它们的参数的顺序返回值 - 但这并不意味着它们将按顺序运行。如果您不关心订单,并且无序结果(可能性能更高),则可以Pool.imap_unordered
。
答案 1 :(得分:1)
无法保证它们的顺序相同,因为最终操作系统会处理调度进程。它们可能会以相同的顺序结束,如果您在chunksize
中将starmap()
设置为1,则可能会增加它的可能性。否则,最多结果将按执行顺序按块大小分组。
如果你之后需要知道原始的顺序,我使用的技巧就是传入一个只是由工作函数重新发出的索引(或者对于n维数据的numpy.ndindex
)。 / p>