Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python multiprocessing.Pool.map\u async()的结果是否以与输入相同的顺序返回?_Python_Parallel Processing_Multiprocessing_Python Multiprocessing_Process Pool - Fatal编程技术网

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
是(令人震惊的)有序的,因此除非另有说明,否则这可能是假定有序的情况