[英]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.