这个问题可能重复。但是,我在这个主题上阅读了很多内容,而且我找不到与我的案例相符的内容 - 或者至少,我没有理解它。
很抱歉给您带来不便。
我正在尝试做的是相当常见的,将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?
答案 0 :(得分:2)
您可以使用微小的代理功能:
def proxy(Dict):
return compute(**Dict)
pool.map(proxy, args)
或者,因为您不需要proxy
函数来污染命名空间:
pool.map(lambda Dict: compute(**Dict), args)