starmap池函数的return值的顺序是什么?

What is the order of return value of the starmap pool function?

使用以下代码:

def myFoo(par1,par2):
    res=par1+par2
    return res

inputPar=[(1,2),(2,3),(4,5)]
with Pool() as pool:
    poolReturn=pool.starmap(myFoo, [(i) for i in inputPar])

我可以确定 poolReturn 中的索引对应于使用相应参数集调用函数的顺序吗?

即:

poolReturn[0]=3 #1+2
poolReturn[1]=5 #2+3
poolReturn[2]=9 #4+5

可以肯定的是,我写了这段我觉得“丑陋”的代码

def myFoo(poolNb,par1,par2):
    res=par1+par2
    return {poolNb:res}

inputPar=[[1,2],[2,3],[4,5]]
with Pool() as pool:
    poolReturn=pool.starmap(myFoo, [[i]+j for i,j in enumerate(inputPar)])

inputParamNb=1
resFromInputParamNb=poolReturn[:][inputParamNb][inputParamNb]
resFromInputParamNb

甚至更难看(键是字符串)。

def myFoo(poolNb,par1,par2):
    res=par1+par2
    dictKey='PoolNb_'+str(poolNb)
    return {dictKey:res}

inputPar=[[1,2],[2,3],[4,5]]
with Pool() as pool:
    poolReturn=pool.starmap(myFoo, [[i]+j for i,j in enumerate(inputPar)])

inputParString='PoolNb_1'
res_poolNb=[i[inputParString] for i in poolReturn if inputParString in i.keys()][0]
res_poolNb

我想有更好的解决方案。任何帮助将不胜感激。

是的。 Pool.starmap() - 和 Pool.map() - return 一个结果列表,结果列表的结果按应用于可迭代参数的函数的从左到右的顺序排列。同样的方式,例如,内置 map()itertools.starmap(),在这方面工作,尽管那些 return 生成器而不是列表。

这种保证结果顺序的唯一函数是Pool.imap_unordered(),它return是一个可迭代的,它没有定义任何关于顺序的信息结果 return。