我正在尝试从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 内数组的顺序返回?
Pool.starmap
(和Pool.map
(将按照传递给它们的参数的顺序返回值 - 这并不意味着它们将按顺序运行。 如果您不关心顺序并且对无序结果(以及潜在的更多性能(感到满意,那么Pool.imap_unordered
.
查看文档
不能保证它们的顺序相同,因为最终操作系统会处理调度进程。它们可能以相同的顺序结束,如果您将 chunksize
设置为 1 in starmap()
,您可能会增加它的机会。否则,结果充其量将按按块大小分组的执行顺序排列。
如果你事后需要知道原始顺序,我使用的技巧是只传入一个索引(或 n 维数据的numpy.ndindex
(,该索引只是由 worker 函数重新发出。