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和pyqt实现360的CLable控件
Feb 21 Python
python创建和删除目录的方法
Apr 29 Python
Python对文件操作知识汇总
May 15 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python实现引用其他路径包里面的模块
Mar 09 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php写的AES加密解密类分享
2014/06/20 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php安装swoole扩展的方法
2015/03/19 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
理解Python中的With语句
2016/03/18 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python3实现点餐系统
2019/01/24 Python
python学生管理系统学习笔记
2019/03/19 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
python批量修改文件名的示例
2020/09/27 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
搞笑创意广告语
2014/03/17 职场文书
机关单位动员会主持词
2014/03/20 职场文书
民事赔偿协议书
2014/11/02 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python