zoukankan      html  css  js  c++  java
  • multiprocessing.Manager共享内存的问题记录

    问题: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方法时需要注意,在操作共享对象时候,除了赋值操作,其他的方法都作用在共享对象的拷贝上,并不会对共享对象生效。

    作者:Standby一生热爱名山大川、草原沙漠,还有妹子
    出处:http://www.cnblogs.com/standby/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    socket通信简介
    存储过程多次遍历
    js动态表格笔记
    Java excel导出笔记
    Eclipse快捷键
    oracle表,视图,存储过程,函数,序列.....查询
    Java基础笔记
    Active MQ学习笔记
    linux svn
    html中submit和button的区别
  • 原文地址:https://www.cnblogs.com/standby/p/8260647.html
Copyright © 2011-2022 走看看