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

时间:2017-05-13 20:46:55

标签: python multiprocessing pool

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

很抱歉给您带来不便。

我正在尝试做的是相当常见的,将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?

1 个答案:

答案 0 :(得分:2)

您可以使用微小的代理功能:

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

pool.map(proxy, args)

或者,因为您不需要proxy函数来污染命名空间:

pool.map(lambda Dict: compute(**Dict), args)
相关问题