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中的实现
May 04 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
python五子棋游戏的设计与实现
Jun 18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 Python
python自动点赞功能的实现思路
Feb 26 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
如何解决.cuda()加载用时很长的问题
May 24 Python
python中redis包操作数据库的教程
Apr 19 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如何透过ODBC来存取数据库
2006/10/09 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
Python Property属性的2种用法
2015/06/21 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
经典而简洁的婚礼主持词
2014/03/13 职场文书
保护黄河倡议书
2014/05/16 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android