使用以下代码:
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()
,它返回一个可迭代的函数,该函数不定义它返回结果的顺序。