[英]Python multiprocessing: forwarding kwargs to actor function
注意: Python 多处理 - 如何将 kwargs 传递给函数? 不回答这个问题。
procs.append(Process(target=fn, args=(cmd, results), kwargs=**kwargs))
Pycharm 显示了在**
for kwargs=**kwargs
expression expected
语法错误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:
您在kwargs
有一个变量名称a
因此函数fn
的a
参数在kwargs
cmd
中都定义了。 尝试将def fn(a, res, **kwargs):
的参数a
更改为另一个名称或将test(a=1, b=2)
更改a
test(e=1, b=2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.