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实现微信接口(itchat)详细介绍
    Oct 23 Python
    python pandas dataframe 行列选择,切片操作方法
    Apr 10 Python
    Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
    Apr 22 Python
    对Python中9种生成新对象的方法总结
    May 23 Python
    对Python中数组的几种使用方法总结
    Jun 28 Python
    Python3解释器知识点总结
    Feb 19 Python
    python实现五子棋小程序
    Jun 18 Python
    django框架使用方法详解
    Jul 18 Python
    Python大数据之网络爬虫的post请求、get请求区别实例分析
    Nov 16 Python
    new_zeros() pytorch版本的转换方式
    Feb 18 Python
    Python基础之字符串常见操作经典实例详解
    Feb 26 Python
    Python djanjo之csrf防跨站攻击实验过程
    May 14 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
    Laravel 默认邮箱登录改成用户名登录的实现方法
    2019/08/12 PHP
    PHP Swoole异步读取、写入文件操作示例
    2019/10/24 PHP
    关于火狐(firefox)及ie下event获取的两种方法
    2012/12/27 Javascript
    JS页面延迟执行一些方法(整理)
    2013/11/11 Javascript
    JavaScript数据操作_浅谈原始值和引用值的操作本质
    2016/08/23 Javascript
    AngularJS 实现弹性盒子布局的方法
    2016/08/30 Javascript
    微信小程序之获取当前位置经纬度以及地图显示详解
    2017/05/09 Javascript
    Vue声明式渲染详解
    2017/05/17 Javascript
    Require.js的基本用法详解
    2017/07/03 Javascript
    js实现轮播图的两种方式(构造函数、面向对象)
    2017/09/30 Javascript
    关于Webpack dev server热加载失败的解决方法
    2018/02/22 Javascript
    npm 常用命令详解(小结)
    2019/01/17 Javascript
    微信小程序移动拖拽视图-movable-view实例详解
    2019/08/17 Javascript
    Node.js控制台彩色输出的方法与原理实例详解
    2019/12/01 Javascript
    TypeScript魔法堂之枚举的超实用手册
    2020/10/29 Javascript
    vue实现列表拖拽排序的功能
    2020/11/02 Javascript
    vue实现抽屉弹窗效果
    2020/11/15 Javascript
    原生js实现表格循环滚动
    2020/11/24 Javascript
    Python字符遍历的艺术
    2008/09/06 Python
    Python语言技巧之三元运算符使用介绍
    2013/03/04 Python
    centos6.4下python3.6.1安装教程
    2017/07/21 Python
    对Python3 序列解包详解
    2019/02/16 Python
    pandas的相关系数与协方差实例
    2019/12/27 Python
    PyCharm刷新项目(文件)目录的实现
    2020/02/14 Python
    Selenium+BeautifulSoup+json获取Script标签内的json数据
    2020/12/07 Python
    英国百安居装饰建材网上超市:B&Q
    2016/09/13 全球购物
    翻新二手苹果产品的网络领导者:Mac of all Trades
    2017/12/19 全球购物
    巴西女装购物网站:Eclectic
    2018/04/24 全球购物
    日本小田急百货官网:Odakyu
    2018/07/19 全球购物
    Java基础知识面试要点
    2016/07/29 面试题
    Java基础面试题
    2014/07/19 面试题
    素质拓展感言
    2014/01/29 职场文书
    公司门卫的岗位职责
    2014/02/19 职场文书
    企业承诺书怎么写
    2014/05/24 职场文书
    《七律·长征》教学反思
    2016/02/16 职场文书
    用JS写一个发布订阅模式
    2021/11/07 Javascript