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 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
python flask安装和命令详解
Apr 02 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
python 如何快速复制序列
Sep 07 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
javascript调试说明
2010/06/07 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
详解Vite的新体验
2021/02/22 Javascript
一步步教你用Python实现2048小游戏
2017/01/19 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
西班牙手机之家:Phone House
2018/10/18 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
结婚典礼主持词
2015/06/29 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python