Python multiprocessing.Pool.map\u async()的结果是否以与输入相同的顺序返回?
通过阅读,我了解到Python multiprocessing.Pool.map\u async()的结果是否以与输入相同的顺序返回?,python,parallel-processing,multiprocessing,python-multiprocessing,process-pool,Python,Parallel Processing,Multiprocessing,Python Multiprocessing,Process Pool,通过阅读,我了解到map\u async和apply\u async是map和appy的两个版本,它们应该更快,但不能保证输入的处理顺序与提供的顺序相同 但是,我不明白调用multiprocessing.pool.AsyncResult.get()时,结果是“重新排序”以匹配输入顺序,还是按处理顺序返回?执行下面的测试时,调用get()时,顺序似乎恢复了。然而,如前所述,我在文件中找不到任何提及。因此,我不会接受这个答案,除非这不是一个事实证明,而不是一个测试 import multiproce
map\u async
和apply\u async
是map
和appy
的两个版本,它们应该更快,但不能保证输入的处理顺序与提供的顺序相同
但是,我不明白调用
multiprocessing.pool.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)
是,退货订单将与输入订单相同。唯一的区别是异步方法不会阻止父线程中的
main线程
,您必须显式地.get()
结果.map()
和.map\u async()
都在引擎盖下调用相同的低级方法.map\u async()
请注意,处理顺序和退货顺序是两件不同的事情。加工订单不受保证和影响
对于
.apply_async()
您将得到您调用的特定AsyncResult
-对象的结果。根据经验,我知道结果是有序的,文档也给出了建议,但令人惊讶的是,没有明确提到这一点。有人明确提到,imap_unordered
是(令人震惊的)有序的,因此除非另有说明,否则这可能是假定有序的情况