python 进程间数据共享multiProcess.Manger实现解析


Posted in Python onSeptember 23, 2019

一、进程之间的数据共享

展望未来,基于消息传递的并发编程是大势所趋

即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。

这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。

但进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题。

以后我们会尝试使用数据库来解决现在进程之间的数据共享问题。

1.1 Manager模块介绍

虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此。

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.

1.2 Manager例子

manager这里可以共享列表,字典等很多数据类型

from multiprocessing import Manager,Process,Lock
def work(d,lock):
  lock.acquire()
  d['count'] -= 1
  lock.release()
if __name__ == '__main__':
  lock = Lock()
  with Manager() as m:
    dic = m.dict({'count':100})#生成一个字典,可在多个进程间共享和传递
    p_l = []
    for i in range(100):
      p = Process(target=work,args=(dic,lock))
      p_l.append(p)
      p.start()
    for p in p_l: #等待结果
      p.join()
    print(dic)

{'count':0}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单说明Python中的装饰器的用法
Apr 24 Python
详解在Python中处理异常的教程
May 24 Python
python安装与使用redis的方法
Apr 19 Python
Python 正则表达式实现计算器功能
Apr 29 Python
TensorFlow实现Logistic回归
Sep 07 Python
python构建基础的爬虫教学
Dec 23 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Python操作qml对象过程详解
Sep 26 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
python实现3D地图可视化
Mar 25 Python
python用opencv 图像傅里叶变换
Jan 04 Python
python程序 线程队列queue使用方法解析
Sep 23 #Python
python程序 创建多线程过程详解
Sep 23 #Python
详解python播放音频的三种方法
Sep 23 #Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 #Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 #Python
Python3 pandas 操作列表实例详解
Sep 23 #Python
详解基于python-django框架的支付宝支付案例
Sep 23 #Python
You might like
php中对2个数组相加的函数
2011/06/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
php类常量用法实例分析
2015/07/09 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
angular 服务随记小结
2019/05/06 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
Python 元类实例解析
2018/04/04 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python列表对象实现原理详解
2019/07/01 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
Python super()函数使用及多重继承
2020/05/06 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
市场营销毕业生自荐信
2013/11/23 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
投资入股合作协议书
2014/10/28 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
2015年国培研修感言
2015/08/01 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python