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收发邮件功能
    Jan 05 Python
    使用python获取电脑的磁盘信息方法
    Nov 01 Python
    对Python之gzip文件读写的方法详解
    Feb 08 Python
    Python中请不要再用re.compile了
    Jun 30 Python
    python双端队列原理、实现与使用方法分析
    Nov 27 Python
    PyTorch中model.zero_grad()和optimizer.zero_grad()用法
    Jun 24 Python
    python上selenium的弹框操作实现
    Jul 13 Python
    anaconda3安装及jupyter环境配置全教程
    Aug 24 Python
    python 解决selenium 中的 .clear()方法失效问题
    Sep 01 Python
    python des,aes,rsa加解密的实现
    Jan 16 Python
    解决pytorch读取自制数据集出现过的问题
    May 31 Python
    详解Python requests模块
    Jun 21 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代码优化及php相关问题总结
    2006/10/09 PHP
    PHP设计模式之命令模式的深入解析
    2013/06/13 PHP
    PHP按行读取文件时删除换行符的3种方法
    2014/05/04 PHP
    服务器迁移php版本不同可能诱发的问题
    2015/12/22 PHP
    yii2 commands模式以及配置crontab定时任务的方法
    2017/08/19 PHP
    php常用的工具开发整理
    2019/09/26 PHP
    Locate a File Using a File Open Dialog Box
    2007/06/18 Javascript
    JavaScript自执行闭包的小例子
    2013/06/29 Javascript
    javascript动态控制服务器控件实例
    2014/09/05 Javascript
    JavaScript获取两个数组交集的方法
    2015/06/09 Javascript
    [原创]jQuery常用的4种加载方式分析
    2016/07/25 Javascript
    如何在Angular.JS中接收并下载PDF
    2016/11/26 Javascript
    vue+mockjs模拟数据实现前后端分离开发的实例代码
    2017/08/08 Javascript
    微信小程序使用wxParse解析html的实现示例
    2018/08/30 Javascript
    详解vue组件中使用路由方法
    2019/02/12 Javascript
    JS module的导出和导入的实现代码
    2019/02/25 Javascript
    JS实现动态无缝轮播
    2020/01/11 Javascript
    JS实现拖拽元素时与另一元素碰撞检测
    2020/08/27 Javascript
    Python多线程编程(五):死锁的形成
    2015/04/05 Python
    Python 实现链表实例代码
    2017/04/07 Python
    Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
    2017/11/09 Python
    python的scikit-learn将特征转成one-hot特征的方法
    2018/07/10 Python
    python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
    2019/06/17 Python
    python获取网络图片方法及整理过程详解
    2019/12/20 Python
    Pandas时间序列:重采样及频率转换方式
    2019/12/26 Python
    python可以用哪些数据库
    2020/06/22 Python
    HTML5实现自带进度条和滑块滑杆效果
    2018/04/17 HTML / CSS
    90后毕业生的求职信范文
    2013/09/21 职场文书
    工程造价专业大专生求职信
    2013/10/06 职场文书
    校优秀毕业生主要事迹
    2014/05/26 职场文书
    市场推广策划方案
    2014/06/02 职场文书
    大学毕业论文致谢词
    2015/05/14 职场文书
    债务纠纷代理词
    2015/05/25 职场文书
    小学学习委员竞选稿
    2015/11/20 职场文书
    《植树问题》教学反思
    2016/03/03 职场文书
    Pygame如何使用精灵和碰撞检测
    2021/11/17 Python