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生成随机验证码(中文验证码)示例
    Apr 03 Python
    python中pandas.DataFrame排除特定行方法示例
    Mar 12 Python
    Python实现统计给定字符串中重复模式最高子串功能示例
    May 16 Python
    解决pip install的时候报错timed out的问题
    Jun 12 Python
    python logging模块的使用总结
    Jul 09 Python
    利用python-docx模块写批量生日邀请函
    Aug 26 Python
    Pytorch之Variable的用法
    Dec 31 Python
    用Python在Excel里画出蒙娜丽莎的方法示例
    Apr 28 Python
    Python使用sys.exc_info()方法获取异常信息
    Jul 23 Python
    详解Django中的FBV和CBV对比分析
    Mar 01 Python
    Python import模块的缓存问题解决方案
    Jun 02 Python
    Python利用capstone实现反汇编
    Apr 06 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
    Yii中CGridView实现批量删除的方法
    2015/12/28 PHP
    ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
    2019/05/06 PHP
    javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
    2013/12/17 Javascript
    JS+CSS实现自动切换的网页滑动门菜单效果代码
    2015/09/14 Javascript
    理解javascript中的MVC模式
    2016/01/28 Javascript
    详解JavaScript实现设计模式中的适配器模式的方法
    2016/05/18 Javascript
    Bootstrap框架下下拉框select搜索功能
    2020/03/26 Javascript
    Bootstrap基本组件学习笔记之按钮组(8)
    2016/12/07 Javascript
    关于HTTP传输中gzip压缩的秘密探索分析
    2018/01/12 Javascript
    javascript原生封装一个淡入淡出效果的函数测试实例代码
    2018/03/19 Javascript
    JQuery Ajax动态加载Table数据的实例讲解
    2018/08/09 jQuery
    在Vue项目中使用snapshot测试的具体使用
    2019/04/16 Javascript
    利用JS如何获取form表单数据
    2019/12/19 Javascript
    js中!和!!的区别与用法
    2020/05/09 Javascript
    vue 判断元素内容是否超过宽度的方式
    2020/07/29 Javascript
    详解Python中for循环是如何工作的
    2017/06/30 Python
    Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
    2018/09/14 Python
    python DataFrame 取差集实例
    2019/01/30 Python
    利用python-pypcap抓取带VLAN标签的数据包方法
    2019/07/23 Python
    Flask框架模板渲染操作简单示例
    2019/07/31 Python
    centos+nginx+uwsgi+Django实现IP+port访问服务器
    2019/11/15 Python
    Python decorator拦截器代码实例解析
    2020/04/04 Python
    python中adb有什么功能
    2020/06/07 Python
    DRF框架API版本管理实现方法解析
    2020/08/21 Python
    StubHub德国:购买和出售门票
    2017/09/06 全球购物
    工厂门卫岗位职责
    2013/11/25 职场文书
    优秀实习自我鉴定
    2013/12/04 职场文书
    安全责任书模板
    2014/07/22 职场文书
    学习十八大标语
    2014/10/09 职场文书
    2014个人年度工作总结
    2014/12/15 职场文书
    2015年社区工会工作总结
    2015/05/26 职场文书
    小学数学教学随笔
    2015/08/14 职场文书
    2015小学新教师个人工作总结
    2015/10/14 职场文书
    PyTorch dropout设置训练和测试模式的实现
    2021/05/27 Python
    OpenCV实现反阈值二值化
    2021/11/17 Java/Android
    如何Tomcat中使用ipv6地址
    2022/05/06 Servers