Python通过4种方式实现进程数据通信


Posted in Python onMarch 12, 2020

python提供了4种方式来满足进程间的数据通信

1. 使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建的进程间进行通信

2. 使用multiprocessing.Manager.Queue可以在Pool进程池创建的进程间进行通信

3. 通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue,但是它只能在两个进程间进行通信

4. 使用Manager类提供的数据结构可以进行进程间的通信

from multiprocessing import Process, Queue, Pool, Manager, Pipe
# 注意线程间的通信,使用的queue.Queue
# from queue import Queue
import time


# 1. 使用multiprocessing.Queue可以在进程间通信

# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print(data)
#
# if __name__ == '__main__':
#   queue= Queue(10)
#   p = Process(target=producer, args=(queue,))
#   c = Process(target=consumer, args=(queue,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 2. 使用共享全局变量,在多进程间通信(结论: 不行)
# def producer(a):
#   a += 1
#   time.sleep(2)
#
#
# def consumer(a):
#   time.sleep(2)
#   print(a)
#
# if __name__ == '__main__':
#   a = 1
#   p = Process(target=producer, args=(a,))
#   c = Process(target=consumer, args=(a,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 3. multiprocessing.Queue不能用于multiprocessing.Pool进程池创建的进程间进行通信
# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   # queue = Queue(10) # 这个是使用multiprocessing.Queue,无效
#   queue = Manager().Queue(10) # 这个是使用multiprocessing.Manager.Queue, 可以
#   pool = Pool(2)
#   pool.apply_async(producer, args=(queue,))
#   pool.apply_async(consumer, args=(queue,))
#   pool.close()
#   pool.join()


# 4.通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue
# def producer(pipe):
#   pipe.send('admin')
#
#
# def consumer(pipe):
#   data = pipe.recv()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   receive_pipe, send_pipe = Pipe()
#   """Pipe只能适应于两个进程间的通信"""
#   p = Process(target=producer, args=(send_pipe,))
#   c = Process(target=consumer, args=(receive_pipe,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 5. 进程间通信的其它方式

def add_data(p_dict, key, value):
  p_dict[key] = value

if __name__ == '__main__':
  progress_dict = Manager().dict() #Manager()类中提供的数据结构都能够做到进程的通信
  first_progress = Process(target=add_data, args=(progress_dict, 'name', 'admin',))
  second_progress = Process(target=add_data, args=(progress_dict, 'age', 45,))
  first_progress.start()
  second_progress.start()
  first_progress.join()
  second_progress.join()
  print(progress_dict) #{'age': 45, 'name': 'admin'}

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

Python 相关文章推荐
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
深入解析Python中的上下文管理器
Jun 28 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
通过python爬虫赚钱的方法
Jan 29 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
django中间键重定向实例方法
Nov 10 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
python简单的三元一次方程求解实例
Apr 02 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
Python多进程编程multiprocessing代码实例
Mar 12 #Python
Python多线程多进程实例对比解析
Mar 12 #Python
Python线程协作threading.Condition实现过程解析
Mar 12 #Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 #Python
Python基于read(size)方法读取超大文件
Mar 12 #Python
Python函数生成器原理及使用详解
Mar 12 #Python
python deque模块简单使用代码实例
Mar 12 #Python
You might like
咖啡的化学
2021/03/03 咖啡文化
PHP面向对象分析设计的经验原则
2008/09/20 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
jquery text()要注意啦
2009/10/30 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
vue实现计步器功能
2019/11/01 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Python守护进程实现过程详解
2020/02/10 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
Pycharm调试程序技巧小结
2020/08/08 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
GWT都有什么特性
2016/12/02 面试题
建筑专业自荐信范文
2014/01/05 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL