首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多处理:将kwargs转发到执行元函数

Python多处理:将kwargs转发到执行元函数
EN

Stack Overflow用户
提问于 2019-12-03 13:37:24
回答 1查看 100关注 0票数 0

注意: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,如下所示

代码语言:javascript
复制
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)

但得到了错误:

代码语言:javascript
复制
self._target(*self._args, **self._kwargs)
TypeError: fn() got multiple values for argument 'a'
Process Process-3:
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)的名称

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59150756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档