python 多进程共享全局变量之Manager()详解


Posted in Python onAugust 15, 2019

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 相关文章推荐
python实现颜色rgb和hex相互转换的函数
Mar 19 Python
Python基于select实现的socket服务器
Apr 13 Python
开源Web应用框架Django图文教程
Mar 09 Python
Python数据分析之获取双色球历史信息的方法示例
Feb 03 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
用Python shell简化开发
Aug 08 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
使用django自带的user做外键的方法
Nov 30 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 #Python
centos7之Python3.74安装教程
Aug 15 #Python
详解python列表(list)的使用技巧及高级操作
Aug 15 #Python
django项目中使用手机号登录的实例代码
Aug 15 #Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 #Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 #Python
django项目登录中使用图片验证码的实现方法
Aug 15 #Python
You might like
如何使用PHP往windows中添加用户
2006/12/06 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
用cssText批量修改样式
2009/08/29 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
python中数据库like模糊查询方式
2020/03/02 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
中国电视购物:快乐购
2017/02/04 全球购物
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
服务之星事迹材料
2014/05/03 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
个人德育工作总结
2015/03/05 职场文书
国富论读书笔记
2015/06/26 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技