Python进程的通信Queue、Pipe实例分析


Posted in Python onMarch 30, 2020

本文实例讲述了Python进程的通信Queue、Pipe。分享给大家供大家参考,具体如下:


内容相关:

概念:进程的通信

Queue:创建与使用

Pipe:创建与使用


进程通信的概念

  • 进程的资源空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。
  • 通信方法:
    • 数据传输:一个进程将它的数据发送给另一个进程【如socket一般,把需要通信的数据传输给对方】
    • 管道:使用一片独立的区域【不在双方的资源空间中】,像一个有两个口的仓库一样,厂家负责在东门把产品放到仓库,司机负责在西门拉走产品
    • 资源共享:约定一片区域,双方都可以随意取放
    • 消息队列:这也是一个独立的区域,足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息

Queue:

  • 可以使用队列multiprocessing.Queue来进行进程通信

Queue 在multiprocessing 模块中:from multiprocessing import Queue

  • Queue的使用:
    • 1.创建对象:Queue对象=Queue()
    • 2.传入对象:要在主进程外使用Queue对象,需要作为参数传入Python进程的通信Queue、Pipe实例分析
    • 3.操作对象:【获取元素:Queue对象.get()】、【放入元素:Queue对象.put(元素)】
#Queue在multiprocessing中
from multiprocessing import Queue,Process

def f(q):#要在主进程外使用,需要作为参数传入
  q.put(['helloworld'])
  

def m(q):
  print("get in p2:",q.get())

if __name__=="__main__":
  q=Queue()
  p=Process(target=f,args=(q,))
  p.start()
  p2=Process(target=m,args=(q,))
  p2.start()

Pipe:

  • 可以使用管道Pipe来进行进程通信

Pipe 在multiprocessing 模块中:from multiprocessing import Pipe

  • Pipe的使用:
    • 1.创建对象:第一个Pipe对象,第二个Pipe对象=Pipe(),返回两个对象,第一个对象只能发,第二个对象只能收
    • 2.传入对象:在要发送的进程,传入第一个Pipe对象;在要接收的进程,传入第二个Pipe对象Python进程的通信Queue、Pipe实例分析
    • 3.操作对象:【获取元素:第一个对象.recv()】、【放入元素:第二个对象.send(元素)】
    • 4.操作完成后关闭管道:第一个对象.close(),第一个对象.close()
    from multiprocessing import Pipe,Process
    
    def f(conn):
      a=[1,2,3,4]
      conn.send(a)
      conn.close()
    def m(conn):
      a=conn.recv()
      conn.close()
    
    
    if __name__=="__main__":
      parent_conn,child_conn=Pipe()#返回两个值,第一个只能发,第二个只能收
      p1=Process(target=f,args=(child_conn,))
      p2 = Process(target=m, args=(parent_conn,))#
      p1.start()
      p2.start()
      p1.join()
      p2.join()

    希望本文所述对大家Python程序设计有所帮助。

    Python 相关文章推荐
    python操作MongoDB基础知识
    Nov 01 Python
    使用Python实现一个简单的项目监控
    Mar 31 Python
    Python数据类型详解(一)字符串
    May 08 Python
    Python随机生成数据后插入到PostgreSQL
    Jul 28 Python
    Python编写一个闹钟功能
    Jul 11 Python
    Python DataFrame 设置输出不显示index(索引)值的方法
    Jun 07 Python
    在pytorch 中计算精度、回归率、F1 score等指标的实例
    Jan 18 Python
    Python通过正则库爬取淘宝商品信息代码实例
    Mar 02 Python
    解决Django Haystack全文检索为空的问题
    May 19 Python
    python实现在线翻译
    Jun 18 Python
    keras的三种模型实现与区别说明
    Jul 03 Python
    Python道路车道线检测的实现
    Jun 27 Python
    基于Django OneToOneField和ForeignKey的区别详解
    Mar 30 #Python
    django 扩展user用户字段inlines方式
    Mar 30 #Python
    Python3标准库之threading进程中管理并发操作方法
    Mar 30 #Python
    解决django xadmin主题不显示和只显示bootstrap2的问题
    Mar 30 #Python
    Python2 与Python3的版本区别实例分析
    Mar 30 #Python
    django xadmin中form_layout添加字段显示方式
    Mar 30 #Python
    基于virtualenv创建python虚拟环境过程图解
    Mar 30 #Python
    You might like
    php结合正则批量抓取网页中邮箱地址
    2015/05/19 PHP
    php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
    2017/01/17 PHP
    PHPExcel中文帮助手册|PHPExcel使用方法(分享)
    2017/06/09 PHP
    在laravel框架中实现封装公共方法全局调用
    2019/10/14 PHP
    jquery遍历input取得input的name
    2009/04/27 Javascript
    Javascript isArray 数组类型检测函数
    2009/10/08 Javascript
    js异常捕获方法介绍
    2013/04/10 Javascript
    js中的for如何实现foreach中的遍历
    2014/05/31 Javascript
    nodejs npm install全局安装和本地安装的区别
    2014/06/05 NodeJs
    js实现简单的左右两边固定广告效果实例
    2015/04/10 Javascript
    jQuery+css3实现Ajax点击后动态删除功能的方法
    2015/08/10 Javascript
    JavaScript实现斗地主游戏的思路
    2016/02/29 Javascript
    jquery 标签 隔若干行加空白或者加虚线的方法
    2016/12/07 Javascript
    Angular.js基础学习之初始化
    2017/03/10 Javascript
    不使用 JS 匿名函数理由
    2017/11/17 Javascript
    Webpack优化配置缩小文件搜索范围
    2017/12/25 Javascript
    setTimeout时间设置为0详细解析
    2018/03/13 Javascript
    vue使用better-scroll实现滑动以及左右联动
    2020/06/30 Javascript
    [05:46]DOTA2英雄梦之声_第18期_陈
    2014/06/20 DOTA
    [02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
    2017/06/23 DOTA
    [57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
    2020/12/01 DOTA
    Python实现partial改变方法默认参数
    2014/08/18 Python
    python写xml文件的操作实例
    2014/10/05 Python
    django1.11.1 models 数据库同步方法
    2018/05/30 Python
    python实现给微信指定好友定时发送消息
    2019/04/29 Python
    解决django同步数据库的时候app models表没有成功创建的问题
    2019/08/09 Python
    python基于opencv检测程序运行效率
    2019/12/28 Python
    大数据分析用java还是Python
    2020/07/06 Python
    解决html5中的video标签ios系统中无法播放使用的问题
    2020/08/10 HTML / CSS
    医药代表个人的求职信分享
    2013/12/08 职场文书
    节能环保口号
    2014/06/12 职场文书
    学校社会实践活动总结
    2014/07/03 职场文书
    银行主办会计岗位职责
    2014/08/13 职场文书
    财务务虚会发言材料
    2014/10/20 职场文书
    Java中使用Filter过滤器的方法
    2021/06/28 Java/Android
    Python echarts实现数据可视化实例详解
    2022/03/03 Python