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自动安装pip
    Apr 24 Python
    深入理解Python对Json的解析
    Feb 14 Python
    python selenium 对浏览器标签页进行关闭和切换的方法
    May 21 Python
    windows下python和pip安装教程
    May 25 Python
    python实现抖音视频批量下载
    Jun 20 Python
    Python 3.6 中使用pdfminer解析pdf文件的实现
    Sep 25 Python
    wxPython绘图模块wxPyPlot实现数据可视化
    Nov 19 Python
    在OpenCV里使用Camshift算法的实现
    Nov 22 Python
    Django操作session 的方法
    Mar 09 Python
    详解Python流程控制语句
    Oct 28 Python
    pandas 操作 Excel操作总结
    Mar 31 Python
    Python使用openpyxl模块处理Excel文件
    Jun 05 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提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
    2012/03/27 PHP
    PHP数组无限分级数据的层级化处理代码
    2012/12/29 PHP
    php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
    2014/11/06 PHP
    php结合ACCESS的跨库查询功能
    2015/06/12 PHP
    PHP中两个float(浮点数)比较实例分析
    2015/09/27 PHP
    PHP+swoole实现简单多人在线聊天群发
    2016/01/19 PHP
    PHP yield关键字功能与用法分析
    2019/01/03 PHP
    php 使用ActiveMQ发送消息,与处理消息操作示例
    2020/02/23 PHP
    改变javascript函数内部this指针指向的三种方法
    2010/04/23 Javascript
    style、 currentStyle、 runtimeStyle区别分析
    2010/08/01 Javascript
    validator验证控件使用代码
    2010/11/23 Javascript
    基于JQuery 滑动与动画的说明介绍
    2013/04/18 Javascript
    jQuery ReferenceError: $ is not defined 错误的处理办法
    2013/05/10 Javascript
    下拉列表select 由左边框移动到右边示例
    2013/12/04 Javascript
    javaScript实现滚动新闻的方法
    2015/07/30 Javascript
    javascript计时器编写过程与实现方法
    2016/02/29 Javascript
    jQuery实现获取table表格第一列值的方法
    2016/03/01 Javascript
    AngularJS基础 ng-show 指令简单示例
    2016/08/03 Javascript
    Angularjs 依赖压缩及自定义过滤器写法
    2017/02/04 Javascript
    jquery鼠标悬停导航下划线滑出效果
    2017/09/29 jQuery
    浅谈vue引用静态资源需要注意的事项
    2018/09/28 Javascript
    Vue-Router基础学习笔记(小结)
    2018/10/15 Javascript
    jQuery实现模拟搜索引擎的智能提示功能简单示例
    2019/01/27 jQuery
    详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
    2019/09/17 Javascript
    js生成1到100的随机数最简单的实现方法
    2020/02/07 Javascript
    python中wx将图标显示在右下角的脚本代码
    2013/03/08 Python
    Python发送email的3种方法
    2015/04/28 Python
    python celery分布式任务队列的使用详解
    2019/07/08 Python
    Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
    2019/08/05 Python
    小区停车场管理制度
    2014/01/27 职场文书
    求职信的最佳写作思路
    2014/02/01 职场文书
    80后职场人的职业生涯规划
    2014/03/08 职场文书
    教师师德演讲稿
    2014/05/06 职场文书
    社区党建工作方案
    2014/06/10 职场文书
    专升本学生毕业自我鉴定
    2014/10/04 职场文书
    MySQL约束(创建表时的各种条件说明)
    2022/06/21 MySQL