【问题标题】:What is the order of return value of the starmap pool function?星图池函数的返回值顺序是什么?
【发布时间】:2022-01-11 02:34:57
【问题描述】:

使用以下代码:

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

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

【问题讨论】:

    标签: python-3.x multithreading threadpool pool


    【解决方案1】:

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

    这种保证结果顺序的唯一函数是Pool.imap_unordered(),它返回一个iterable,它没有定义它返回结果的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2011-10-23
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多