星图池函数的返回值的顺序是什么



使用以下代码:

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()-返回一个结果列表,其中包含应用于可迭代参数的函数从左到右的结果。同样的方式,例如,内置的map()itertools.starmap()在这方面起作用,尽管它们返回生成器而不是列表。

这类函数中唯一一个保证结果顺序的是Pool.imap_unordered(),它返回一个可迭代的函数,该函数不定义它返回结果的顺序。

最新更新