2017-10-16 25 views
0

我嘗試在python(3.4.2)中使用多處理工具來加速我的性能。我的普通程序運行正常,但我必須在其中處理大型嵌套字典。附上了一個簡化版本,它顯示了我的問題。如果我直接使用TestProc它正在工作,而不是多處理。python多處理嵌套式dictionay

感謝您的幫助!

import multiprocessing 

def TestProc(liste, results): 

    for i in liste: 

     results[i] = {'power':{'square': float(i)**2, 'cubic': 
     float(i)**3},'root':{'square': float(i)**(1/2), 'cubic': float(i)**(1/3)}} 

if __name__ == "__main__": 

    multiprocessing.freeze_support() 
    results = multiprocessing.Manager().dict() 

    results = {} 
    liste = ['1','2','3','4','5'] 

    for i in liste: 

     results[i] = multiprocessing.Manager().dict() 

    print(results) 

    #TestProc(liste, results) 

    p1 = multiprocessing.Process(target=TestProc, args=(liste,results,)) 
    p1.start() 
    p1.join() 

    print(results) 
+0

你在不使用第一個值的情況下連續兩次指定'results',並且在結果中放置了多個'multiprocessing.Manager()。dict()'(這應該是做什麼的,不應該結果開始*空* *) – jonatan

回答

0

當你這樣做:

results[i] = ... 

你是不是在results[i]增加值的DictProxy,您正在使用另一個品牌的新dict替換它,裏面的外resultsdict。因此,唯一需要同步的是外部dict

將第15行替換爲results = multiprocessing.Manager().dict(),並刪除從未做過任何事情的循環行18-20。