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的Bottle框架中使用微信API的示例
    Apr 23 Python
    Python 登录网站详解及实例
    Apr 11 Python
    python3.6 实现AES加密的示例(pyCryptodome)
    Jan 10 Python
    django缓存配置的几种方法详解
    Jul 16 Python
    Python多线程原理与用法实例剖析
    Jan 22 Python
    详解Python给照片换底色(蓝底换红底)
    Mar 22 Python
    python画图的函数用法以及技巧
    Jun 28 Python
    keras小技巧——获取某一个网络层的输出方式
    May 23 Python
    keras 多gpu并行运行案例
    Jun 10 Python
    python json.dumps() json.dump()的区别详解
    Jul 14 Python
    Python内存泄漏和内存溢出的解决方案
    Sep 26 Python
    Python实现仓库管理系统
    May 30 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动态生成虚拟现实VRML网页
    2006/10/09 PHP
    在PHP中PDO解决中文乱码问题的一些补充
    2010/09/06 PHP
    PHP中Header使用的HTTP协议及常用方法小结
    2014/11/04 PHP
    PHP explode()函数的几个应用和implode()函数有什么区别
    2015/11/05 PHP
    怎么用javascript进行拖拽
    2006/07/20 Javascript
    SWFObject Flash js调用类
    2008/07/08 Javascript
    FileUpload 控件 禁止手动输入或粘贴的实现代码
    2010/04/07 Javascript
    利用jquery操作select下拉列表框的代码
    2010/06/04 Javascript
    JavaScript开发规范要求(规范化代码)
    2010/08/16 Javascript
    HTML上传控件取消选择
    2013/03/06 Javascript
    js实现动态改变字体大小代码
    2014/01/02 Javascript
    JavaScript分析、压缩工具JavaScript Analyser
    2014/12/31 Javascript
    jQuery Validate初步体验(一)
    2015/12/12 Javascript
    用iframe实现不刷新整个页面上传图片的实例
    2016/11/18 Javascript
    MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
    2017/04/13 Javascript
    详解基于 Nuxt 的 Vue.js 服务端渲染实践
    2017/10/24 Javascript
    vue 使某个组件不被 keep-alive 缓存的方法
    2018/09/21 Javascript
    微信小程序实现日历效果
    2018/12/28 Javascript
    五分钟搞懂Vuex实用知识(小结)
    2019/08/12 Javascript
    vue+layui实现select动态加载后台数据的例子
    2019/09/20 Javascript
    vuex + keep-alive实现tab标签页面缓存功能
    2019/10/17 Javascript
    解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
    2020/05/03 Javascript
    Python协程的用法和例子详解
    2017/09/09 Python
    Python英文文本分词(无空格)模块wordninja的使用实例
    2019/02/20 Python
    使用python实现滑动验证码功能
    2019/08/05 Python
    python 哈希表实现简单python字典代码实例
    2019/09/27 Python
    浅析Python模块之间的相互引用问题
    2021/02/26 Python
    html5简介_动力节点Java学院整理
    2017/07/07 HTML / CSS
    英国广泛的照明产品网站:Lights4living
    2018/01/28 全球购物
    应用化学专业职业生涯规划书
    2013/12/31 职场文书
    图书馆志愿者活动总结
    2014/06/27 职场文书
    公司试用期员工自我评价
    2014/09/17 职场文书
    新员工辞职信范文
    2015/05/12 职场文书
    《宝可梦》动画制作25周年到来 官方发布特别纪念视频
    2022/04/01 日漫
    Python语法学习之进程的创建与常用方法详解
    2022/04/08 Python
    Win11 BitLocker 驱动器加密
    2022/04/19 数码科技