Python 将字典列表传递给池



这个问题可能是重复的。然而,我读了很多关于这个话题的东西,我没有找到一个符合我的情况——或者至少,我不明白它。

对不起,不出处。

我试图做的是相当普遍的,将kwargs列表传递给pool.starmap((,以实现多处理。

这是我减少的情况:

def compute(firstArg, **kwargs): # A function that does things
    # Fancy computing stuff...
    # Saving to disk...
    return True
if __name__ ==  '__main__':
    args = [{
        'firstArg': "some data",
        'otherArg': "some other data"
        'andAnotherArg': x*2
    } for x in range(42)]
    pool = Pool(4)
    pool.starmap(compute, args)
    pool.close()
    pool.terminate()

我以为 starmap(( 会解压缩字典并将其作为关键字 args 传递给 compute((,但查看源代码(另见 l.46(,它只发送键(或值?

所以它提出了:

TypeError: compute() takes 1 positional argument but 3 were given

这必须是一种清晰、直接的方法......任何帮助将不胜感激。

这是一个非常相似的问题:Python Multiprocessing - 如何传递 kwargs 来函数?

您可以使用一个小的代理函数:

def proxy(Dict):
    return compute(**Dict)
pool.map(proxy, args)

或者,由于您不需要污染命名空间的 proxy 函数:

pool.map(lambda Dict: compute(**Dict), args)

相关内容

  • 没有找到相关文章

最新更新