是否按与输入相同的顺序返回multiprocessing.Pool.map_async()的结果?

时间:2019-08-30 11:11:52

标签: python parallel-processing multiprocessing python-multiprocessing process-pool

阅读multiprocessing.Pool doc我知道map_asyncapply_asyncmapappy的两个版本,应该更快,但不能保证输入的处理顺序与提供的顺序相同。

但是,我不知道在调用multiprocessing.pool.AsyncResult.get()时是否对结果进行“重新排序”以匹配输入顺序,还是按处理的顺序返回结果?

2 个答案:

答案 0 :(得分:1)

是的,退货顺序将与输入顺序相同。唯一的区别是异步方法不会阻塞父级中的MainThread,而您将必须显式地.get().map().map_async()都在后台调用相同的低级方法._map_async()

请注意,处理顺序退货顺序是两回事。 chunking无法保证并影响处理顺序。

对于.apply_async(),您将得到要调用其AsyncResult的特定.get()对象的结果。

答案 1 :(得分:0)

执行下面的测试,似乎在调用get()时恢复了顺序。正如Right Leg所说,我在文档中找不到任何提及。因此,我不会接受这个答案,除非事实而不是测试证明了这一点

import multiprocessing as mp
from time import sleep

def func(i):
    if i == 1:
        sleep(3)
    return i**2



if __name__=='__main__':

    with mp.Pool(mp.cpu_count()) as pool:
        res = pool.map_async(func, range(10)).get()
        print(res)     
相关问题