2016-08-12 2 views
0

파이썬의 다중 처리 기능을 사용하여 사전을 어떻게 전달합니까? 문서 : https://docs.python.org/3.4/library/multiprocessing.html#reference는 사전을 통과 말한다,하지만 난 여기에Python Multiprocessing - kwargs를 함수에 전달하는 방법?

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) 
+1

나는 [이 스레드 (http://stackoverflow.com/questions/6832554/python-multiprocessing-how-do-i-share-a-dict-among-multiple-processes) 도움이 될 것이라고 생각 당신의 질문에 대답하십시오. –

+0

또한 여기 : https://stackoverflow.com/questions/34031681/passing-kwargs-with-multiprocessing-pool-map –

답변

5

:

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) 
+0

고마워! 나는 그것이 가능하다고 생각하지 않았고 그것을 다른 방식으로 코딩하는 것을 끝내었다. 그러나 나는 이것을 미래에 사용할 것이다! 또한 'bob'+ str (i) 뒤에 쉼표를 추가하면 'bob'+ str (i) 목록이됩니다. –

관련 문제