是多处理的结果.Pool.map_async() 以与输入相同的顺序返回?



读取多处理。池文档 我知道map_asyncapply_asyncmapappy的两个版本,它们应该更快,但不能保证输入的处理顺序与提供的顺序相同。

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

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

请注意,处理顺序和退货顺序是两回事。处理顺序不能保证,并且受分块的影响。

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

执行下面的测试似乎在调用get()时恢复了顺序。然而,正如右腿所说,我在文档中找不到任何提及它的内容。因此,我不会接受这个答案,直到这没有被事实证明,而不是测试

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)     

相关内容

  • 没有找到相关文章

最新更新