0
我想我已經在這裏找到了類似的問題,但沒有找到一個很容易理解的好解釋。我也嘗試閱讀python文檔,但也沒有在那裏找到詳細的解釋。在進程間修改共享字典對象不起作用
現在,這裏是代碼:
from multiprocessing import Process, Manager
def f(d):
d[1] = [[1]]
if 2 in d.keys():
d[2].append([2])
else:
d[2] = [[2]]
d[3] = [[3]]
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
p1 = Process(target=f, args=(d,))
p2 = Process(target=f, args=(d,))
p1.start()
p2.start
p1.join()
p2.join
print(d)
我有兩個進程運行和共享來自管理器進程的字典對象。我可以將新的鍵值對添加到字典對象,但如果鍵已經存在,則不能修改值。
這是爲什麼?如果我們使用這樣的共享對象,如果想要修改,會出現什麼問題?
我做了一個演示原子性問題的例子。 http://ideone.com/N7d99s(沒有包括,因爲我不想延長答案太長) – falsetru 2014-09-24 14:41:53
帶鎖的修改示例:http://ideone.com/TyVKs9 – falsetru 2014-09-24 14:44:22
感謝它的工作。但早些時候我也試過(不知道原因)mylist = d [2]; mylist = mylist.append([2]); d [2] = mylist。但它沒有奏效。有什麼區別? – bluefoggy 2014-09-24 14:46:18