Python Multiprocessing – Как передать функции kwargs?

Как передать словарь в функцию с многопроцессорностью Python? Документация: https://docs.python.org/3.4/library/multiprocessing.html#reference говорит, чтобы передать словарь, но я продолжаю получать

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

Вот код:

 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) 

Когда я запустил ваш код, у меня появилась другая ошибка:

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

Я отлаживал печать args и kwargs и менял метод на fp(*args, **kwargs) и заметил, что «bob_» передается как массив букв. Кажется, что круглые скобки, используемые для args были работоспособными и фактически не давали вам кортеж. Изменив его в списке, а затем передав в numList в качестве аргумента ключевого слова, я сделал код для меня.

 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)