2017-10-16 4 views
0

パフォーマンスを向上させるために、Python(3.4.2)でマルチプロセッシングツールを使用しようとしています。私の通常のprogrammは正常に実行されていますが、大規模でネストされた辞書を処理する必要があります。私の問題を示す簡略版を添付しました。 TestProcを直接使用すると、マルチプロセッシングでは機能しません。Pythonマルチプロセッシングネストされたディクショナリー

ありがとうございました!

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'に2回割り当てて、結果に複数の' multiprocessing.Manager().dict() 'を入れています。結果は* empty *になるはずはありませんか?) – jonatan

答えて

0

あなたは:

results[i] = ... 

あなたが外resultsdictの内側に、dict新しい別のブランドとそれを交換する、results[i]DictProxyに値を追加されていません。したがって、同期させる必要があるのは、外側のdictだけです。

15行目をresults = multiprocessing.Manager().dict()に置き換え、決して何もしなかったループ行18-20を削除します。

関連する問題