这个问题可能是重复的.但是,我在这个主题上阅读了很多内容,而且我没有找到与我的案例相符的内容 – 或者至少,我没有理解它.
很抱歉给您带来不便.
我正在尝试做的是相当普遍的,将一个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)