2016-08-12 26 views
0

如何通過Python的多處理將字典傳遞給函數?文檔:https://docs.python.org/3.4/library/multiprocessing.html#reference說,通過一本字典,但我不斷收到Python多處理 - 如何通過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)列表, –