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 相关文章推荐
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
微信小程序python用户认证的实现
Jul 29 Python
Python线程指南分享
Nov 19 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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
php4的session功能评述(三)
2006/10/09 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
原生JS实现N级菜单的代码
2017/05/21 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
vue实现文件上传功能
2018/08/13 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Django发送邮件功能实例详解
2019/09/02 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
银行出纳岗位职责
2013/11/25 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫