問題:https://stackoverflow.com/questions/8640367/python-manager-dict-in-multiprocessing
使用 multiprocessing.Manager 來實現IPC的時候,遇到的問題
示例1
>>> from multiprocessing import Process, Manager >>> >>> manager = Manager() >>> d = manager.dict() >>> >>> def f(): ... d['k'].append(3) ... print d ... >>> if __name__ == '__main__': ... d['k'] = [] ... p = Process(target=f) ... p.start() ... p.join() ... {'k': []} >>>
示例2
>>> from multiprocessing import Process, Manager >>> >>> def f(d): ... d['k'].append(4) ... print type(d),d,id(d) ... >>> if __name__ == '__main__': ... manager = Manager() ... d = manager.dict({'k':[]}) ... p = Process(target=f,args=(d,)) ... p.start() ... p.join() ... print type(d),d,id(d) ... <class 'multiprocessing.managers.DictProxy'> {'k': []} 140607041173456 <class 'multiprocessing.managers.DictProxy'> {'k': []} 140607041173456 >>>
為什么沒有append成功呢?
再看示例3
>>> from multiprocessing import Process, Manager >>> >>> manager = Manager() >>> d = manager.dict() >>> >>> def f(): ... d['k'] = 2 ... print d ... >>> if __name__ == '__main__': ... d['k'] = [] ... p = Process(target=f) ... p.start() ... p.join() ... {'k': 2} >>>
參考:http://www.cnblogs.com/havePassed/p/5168833.html
總結
使用Manager方法時需要注意,在操作共享對象時候,除了賦值操作,其他的方法都作用在共享對象的拷貝上,並不會對共享對象生效。