【问题标题】:Python Multiprocessing - How to pass kwargs to function?Python Multiprocessing - 如何将 kwargs 传递给函数?
【发布时间】:2016-08-12 01:54:32
【问题描述】:

如何使用 Python 的多处理将字典传递给函数?文档:https://docs.python.org/3.4/library/multiprocessing.html#reference 说要通过字典,但我不断收到

TypeError: fp() got multiple values for argument 'what'

代码如下:

from multiprocessing import Process, Manager
   
def fp(name, numList=None, what='no'):
        print ('hello %s %s'% (name, what))
        numList.append(name+'44')
 
if __name__ == '__main__':

    manager = Manager()
 
    numList = manager.list()
    for i in range(10):
        keywords = {'what':'yes'}
        p = Process(target=fp, args=('bob'+str(i)), kwargs={'what':'yes'})
        p.start()
        print("Start done")
        p.join()
        print("Join done")
    print (numList)

【问题讨论】:

标签: python multiprocessing keyword-argument


【解决方案1】:

当我运行你的代码时,我得到了一个不同的错误:

TypeError: fp() takes at most 3 arguments (5 given)

我通过打印 args 和 kwargs 并将方法更改为 fp(*args, **kwargs) 进行了调试,并注意到“bob_”作为字母数组传入。用于args 的括号似乎是可操作的,实际上并没有给你一个元组。将其更改为列表,然后将 numList 作为关键字参数传入,使代码对我有用。

from multiprocessing import Process, Manager

def fp(name, numList=None, what='no'):
    print ('hello %s %s' % (name, what))
    numList.append(name+'44')

if __name__ == '__main__':

    manager = Manager()

    numList = manager.list()
    for i in range(10):
        keywords = {'what': 'yes', 'numList': numList}
        p = Process(target=fp, args=['bob'+str(i)], kwargs=keywords)
        p.start()
        print("Start done")
        p.join()
        print("Join done")
    print (numList)

【讨论】:

  • 谢谢!我认为这是不可能的,最终以不同的方式对其进行编码。但我以后会用这个!在 'bob'+str(i) 之后添加逗号使其成为列表 'bob'+str(i),
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 2020-06-30
  • 1970-01-01
  • 2013-07-26
  • 2015-01-28
  • 1970-01-01
  • 2021-12-27
  • 2016-03-13
相关资源
最近更新 更多