python 多进程共享全局变量之Manager()详解
2019-08-15 16:47
1286 查看
Manager支持的类型有
list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array。
但当使用Manager处理list、dict等可变数据类型时,需要注意一个陷阱,即Manager对象无法监测到它引用的可变对象值的修改,需要通过触发__setitem__方法来让它获得通知。
而触发__setitem__方法比较直接的办法就是增加一个中间变量,如同在C语言中交换两个变量的值一样:
int a=1;int b=2;int tmp=a;a=b;b=tmp;
python例子:
from multiprocessing import Manager,Process def test_manager(): m[0]['id'] = 2 m = Manager().list() m.append({"id":1}) p = Process(target=test_manager) p.start() p.join() print m[0]
执行结果:
{"id":1}
并未改变
修改test_manager()
def test_manager(): tmp = m[0] tmp{"id"} = 2 m[0] = tmp
此时执行结果即为:
{"id":2}
另外,对于Process需注意对象要可被序列化pickle
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Python多任务(五)-----4种进程间的通信(数据交换)Queue对象、管道Pipe、共享内存Value和Array、Manager对象 详解
- Python 进程之间共享数据(全局变量)
- Python 进程之间共享数据(全局变量)
- Python 多进程默认不能共享全局变量
- 浅谈Python 多进程默认不能共享全局变量的问题
- python unittest TestCase间共享数据(全局变量的使用)
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- python多线程-共享全局变量
- python自定义线程类的使用与共享全局变量的问题
- dll和exe的共享节------多进程共享dll/exe全局变量
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- Python global全局变量函数详解
- Python 全局变量、局部变量、静态变量 详解
- Python的全局变量和局部变量详解——locals 和globals两个函数
- python中的多线程-共享全局变量
- Python-消息队列/多线程/共享全局变量/线程非安全等
- Python程序中的进程操作-进程间数据共享(multiprocess.Manager)
- Linux共享库(动态库)与进程之间共享全局变量可行性分析
- python unittest TestCase间共享数据(全局变量的使用)
- Python multiprocessing.Manager介绍和实例(进程间共享数据)