Python 多处理:将 kwargs 转发给 actor 函数
Python multiprocessing: forwarding kwargs to actor 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:
您在 kwargs
中有一个变量名称 a
因此函数 fn
中的 a
参数在 cmd
和 [=11= 中都定义了].尝试将 def fn(a, res, **kwargs):
中的参数 a
更改为另一个名称或将 test(a=1, b=2)
中的 a
更改为 test(e=1, b=2)
注意:
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:
您在 kwargs
中有一个变量名称 a
因此函数 fn
中的 a
参数在 cmd
和 [=11= 中都定义了].尝试将 def fn(a, res, **kwargs):
中的参数 a
更改为另一个名称或将 test(a=1, b=2)
中的 a
更改为 test(e=1, b=2)