-2

這是主要的代碼:值不存儲到管理器()的池(內部字典())

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 

作爲評價在代碼中,它將打印空列表而不是期望的值。 如何讓這個共享字典和列表正常工作?

第一次打印顯示期望值。第二個打印顯示預期的鍵,但值部分是空列表。由於它正確顯示了鍵,共享正在工作。附加部分存在一些問題。我無法弄清楚。

打倒選民,請在您認爲我的問題與該問題相同之前仔細閱讀鏈接的問題。如果你仍然堅持他們是一樣的,請留下評論,說明你爲什麼這麼想。從我的觀點來看,這兩個問題都不一樣。鏈接的問題詢問如何與建議使用Manager.dict()的答案共享一個字典。我的問題已經使用了Manager.dict(),並且由於異常而失敗。謝謝。

+0

您是否想在所有管理器實例中共享「mylist」? –

+0

[編輯]你的問題,並顯示'func(???',或者你使用'mylist'作爲全局函數頭? – stovfl

+0

@pdshah應該只有一個mydict實例和一個mylist實例整個程序都是全局的,所有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)