注意:Python Multiprocessing - How to pass kwargs to function?不会回答这个问题。
procs.append(Process(target=fn, args=(cmd, results), kwargs=**kwargs))
Pycharm在kwargs=**kwargs的**中显示语法错误expression expected。
如何在不扩展的情况下传入kwargs?
我尝试使用kwargs=kwargs,如下所示
import multiprocessing
from multiprocessing import Process
import time
c = 0
def fn(a, res, **kwargs):
print('sleeping: {}'.format(kwargs))
time.sleep(10)
global c
c+=1
res[a]=c
print(res)
def test(**kwargs):
cmds = ['1','2','3']
procs = []
manager = multiprocessing.Manager()
results = manager.dict()
for cmd in cmds:
procs.append(Process(target=fn, args=(cmd, results), kwargs=kwargs))
procs[-1].start()
for proc in procs:
proc.join()
print(results)
if __name__ == '__main__':
test(a=1, b=2)但得到了错误:
self._target(*self._args, **self._kwargs)
TypeError: fn() got multiple values for argument 'a'
Process Process-3:发布于 2019-12-03 13:51:53
您在kwargs中有一个变量名a,因此函数fn中的a参数在kwargs中的两个cmd中都有定义。尝试将def fn(a, res, **kwargs):中的参数a更改为其他名称,或者将test(a=1, b=2)中的a更改为类似test(e=1, b=2)的名称
https://stackoverflow.com/questions/59150756
复制相似问题