在进程池 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 内数组的顺序返回?

Pool.starmap(和Pool.map(将按照传递给它们的参数的顺序返回值 - 这并不意味着它们将按顺序运行。 如果您不关心顺序并且对无序结果(以及潜在的更多性能(感到满意,那么Pool.imap_unordered.

查看文档

不能保证它们的顺序相同,因为最终操作系统会处理调度进程。它们可能以相同的顺序结束,如果您将 chunksize 设置为 1 in starmap(),您可能会增加它的机会。否则,结果充其量将按按块大小分组的执行顺序排列。

如果你事后需要知道原始顺序,我使用的技巧是只传入一个索引(或 n 维数据的numpy.ndindex(,该索引只是由 worker 函数重新发出。

相关内容

  • 没有找到相关文章

最新更新