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爬取软考试题之ip自动代理
Mar 28 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
python字典的常用方法总结
Jul 31 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
Django drf请求模块源码解析
Jun 08 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
第1次亲密接触PHP5(2)
2006/10/09 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
php操作redis缓存方法分享
2015/06/03 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
Smarty模板配置实例简析
2019/07/20 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
JQuery live函数
2010/12/24 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
jsonp原理及使用
2013/10/28 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
python使用range函数计算一组数和的方法
2015/05/07 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python socket 套接字实现通信详解
2019/08/27 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
小学生校园广播稿
2014/09/28 职场文书
春节晚会开场白
2015/05/29 职场文书