Python多处理 – 将一个dicts列表传递给池

这个问题可能是重复的.但是,我在这个主题上阅读了很多内容,而且我没有找到与我的案例相符的内容 – 或者至少,我没有理解它.

很抱歉给您带来不便.

我正在尝试做的是相当普遍的,将一个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()将解压缩dict并将其作为关键字args传递给compute(),但是查看source code(另请参阅l.46),它只发送键(或值?).

所以它提出了:

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

它必须是一个明确,直接的方式来做到这一点…任何帮助将不胜感激.

这是一个非常相似的问题:Python Multiprocessing – How to pass kwargs to function?

最佳答案 您可以使用一个小代理功能:

def proxy(Dict):
    return compute(**Dict)

pool.map(proxy, args)

或者,因为您不需要代理功能来污染命名空间:

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