Python Multiprocessing - How to pass kwargs to function?

匿名 (未验证) 提交于 2019-12-03 08:30:34

问题:

How do I pass a dictionary to a function with Python's Multiprocessing? The Documentation: https://docs.python.org/3.4/library/multiprocessing.html#reference says to pass a dictionary, but I keep getting

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

Here's the code:

from multiprocessing import Pool, 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) 

回答1:

When I ran your code, I got a different error:

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

I debugged by printing args and kwargs and changing the method to fp(*args, **kwargs) and noticed that "bob_" was being passed in as an array of letters. It seems that the parentheses used for args were operational and not actually giving you a tuple. Changing it to the list, then also passing in numList as a keyword argument, made the code work for me.

from multiprocessing import Pool, 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) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!