结果是multiprocessing.Pool.map\u异步()以与输入相同的顺序返回?

2024-06-11 04:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是,我不明白调用multiprocessing.pool.AsyncResult.get()时,结果是“重新排序”以匹配输入顺序,还是按处理顺序返回?你知道吗


Tags: 版本mapgetasyncdoc排序顺序multiprocessing
2条回答

是,退货订单将与输入订单相同。唯一的区别是异步方法不阻止父级中的MainThread,您必须显式地.get()结果。.map().map_async()都在引擎盖下调用相同的低级方法._map_async()。你知道吗

请注意,处理顺序退货顺序是两件不同的事情。处理顺序不受chunking的保证和影响。你知道吗

对于.apply_async(),您将得到您正在调用.get()的特定AsyncResult-对象的结果。你知道吗

在执行下面的测试时,似乎在调用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)     

相关问题 更多 >