apply_async结果顺序

时间:2017-10-18 07:41:12

标签: python-3.x multiprocessing

如果我理解正确,apply_async会立即返回AsyncResult对象。如果我按以下方式收集这些对象,并且只在所有工作者完成后才使用get(),是否可以安全地假设值将按函数调用的顺序进行?

objRes = [None] * len(aRange)
pool = Pool(processes=8)
for x in aRange:
    objRes[x] = pool.apply_async(f,(arg1, arg2, arg3,))
pool.close()
pool.join()

res = [None] * len(aRange)
for x in aRange:
    res[x] = objRes[x].get()

我开始尝试使用pool.map()和pool.starmap(),但我有两个数组作为参数的一部分,无法弄清楚如何准确传递它们。

1 个答案:

答案 0 :(得分:1)

AsyncResult函数返回的apply_async对象与您安排的元组函数参数相关联。

因此,当您致电AsyncResult.get时,您将获得该给定工作的结果。

如果您将AsyncResult个对象放在一个列表中,其顺序与您安排的作业相同,那么您将按顺序获得结果。

map函数内部的工作方式与您的示例非常相似。如果要将多个参数传递给调度函数,则需要将其与其余参数分组。如果你有很多争论,那可能会耗费内存。

arg_list = ((arg1, arg2, arg3) for _ in aRange)

pool.map(f, arg_list)