-2

これは主コードである:。Value)は(Managerに格納されていない辞書()プール(内側)

if __name__ == '__main__': 
    manager = Manager() 
    mylist = manager.list() 
    mydict = manager.dict() 

    mylist.append('abc') 
    mylist.append('xyz') 

    for k in mylist: 
     mydict[k] = manager.list() 

    pool = Pool(processes = 100) 
    pool.map(func, arg) 
    pool.terminate() 

これはFUNC()の定義である:コメントよう

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) # gives correct values 
    mydict[x].append(dict(r)) 
    print (mydict) # gives empty list, keys are printed correct 

コードでは、期待値の代わりに空のリストを印刷しています。 この共有ディクテーションとリストを正しく動作させるにはどうすればよいですか?

最初の印刷が期待値を示しています。 2番目の印刷には予想されるキーが表示されますが、値の部分は空のリストです。キーが正しく表示されるため、共有が機能しています。追加部分に問題があります。私はそれを把握することができません。

ダウンした有権者は、リンクされた質問を慎重に読んでから、自分の質問がその質問と同じであることを前提にしてください。あなたがまだ同じであると主張している場合は、理由を述べるコメントを残してください。私の見解では、両方の質問が異なっています。リンクされた質問では、dictをManager.dict()の使用を示唆する回答とどのように共有するかについて質問します。私の質問はすでにManager.dict()を使用しており、異常のために失敗しています。ありがとうございました。

+0

すべてのマネージャーインスタンスで「mylist」を共有したいですか? –

+0

あなたの質問を編集し、 'func(???')の関数ヘッダを表示するか、グローバルとして 'mylist'を使用しますか? – stovfl

+0

@pdshah mydictのインスタンスは1つだけです。全体のプログラムですが、両方ともグローバルです.Mydict内のすべてのデータは、myfunc()から可視で変更可能でなければなりません。 – aste123

答えて

0

コードのコメントからわかるように、mydictは正しくfunc()に読み込まれていますが、突然変異しません。 Manger.dict()オブジェクトはネストされた部分を変更できません。

新しい辞書を作成し、突然変異後にmydictと指定することで修正できます。

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) 
    foo = mydict[x] 
    foo.append(dict(r)) 
    mydict[x] = foo 
    print (mydict) 
関連する問題