位置: IT常识 - 正文

Python如何进行进程间的通信(python 如何)

编辑:rootadmin

推荐整理分享Python如何进行进程间的通信(python 如何),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python的步骤,python zen,Python如何进行进制转换,python进一,python的步骤,利用python进行,python怎么进阶,Python如何进行进制转换,内容如对您有帮助,希望把文章链接给更多的朋友!

进程间的通信-Queue

1. Queue的使用

可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序,首先用一个小实例来演示一下Queue的工作原理:

#-*-coding:utf-8-*-frommultiprocessingimportQueue#创建一个Queue对象,最多可接受三条put消息q=Queue(3)q.put("消息1")q.put("消息2")print(q.full())q.put("消息3")print(q.full())try:q.put("消息4",True,2)except:print("消息队列已满,现有消息数量:%s"%q.qsize())try:q.put_nowait("消息5")except:print("消息队列已满,现有消息数量:%s"%q.qsize())#推荐方式,先判断消息队列是否已满,在写入ifnotq.full():q.put_nowait("消息6")#读取消息时,先判断消息队列是否为空,在读取ifnotq.empty():foriinrange(q.qsize()):print(q.get_nowait())

运行结果为:

FalseTrue消息队列已满,现有消息数量:3消息队列已满,现有消息数量:3消息1消息2消息3

说明

初始化Queue()对象时(例如:q=Queue()),若括号中没有指定可接收的消息数量,或数量为负值,那么就代表可接受的消息数量没有上限(直到内存的尽头);

Queue.qsize():返回当前队列包含的消息数量;

Queue.empty():如果队列为空,返回True,反之False ;

Queue.full():如果队列满了,返回True,反之False;

Queue.get([block[, timeout]]):获取队列中的一条消息,然后将其从列队中移除,block默认值为True;

Python如何进行进程间的通信(python 如何)

1)如果block使用默认值,且没有设置timeout(单位秒),消息列队如果为空,此时程序将被阻塞(停在读取状态),直到从消息列队读到消息为止,如果设置了timeout,则会等待timeout秒,若还没读取到任何消息,则抛出"Queue.Empty"异常;

2)如果block值为False,消息列队如果为空,则会立刻抛出"Queue.Empty"异常;

Queue.get_nowait():相当Queue.get(False);

Queue.put(item,[block[, timeout]]):将item消息写入队列,block默认值为True;

1)如果block使用默认值,且没有设置timeout(单位秒),消息列队如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息列队腾出空间为止,如果设置了timeout,则会等待timeout秒,若还没空间,则抛出"Queue.Full"异常;

2)如果block值为False,消息列队如果没有空间可写入,则会立刻抛出"Queue.Full"异常;

Queue.put_nowait(item):相当Queue.put(item, False);

2. Queue实例

我们以Queue为例,在父进程中创建两个子进程,一个往Queue里写数据,一个从Queue里读数据:

frommultiprocessingimportProcessfrommultiprocessingimportQueueimportosimporttimeimportrandom#写数据进程执行的代码defwrite(q):forvaluein["A","B","C"]:print("Put%stoQueue"%value)q.put(value)time.sleep(random.random())#读取数据进程的代码defread(q):whileTrue:ifnotq.empty():value=q.get(True)print("Get%sfromQueue"%value)time.sleep(random.random())else:breakif__name__=='__main__':#父进程创建Queue,并传递给各个子进程q=Queue()pw=Process(target=write,args=(q,))pr=Process(target=read,args=(q,))#启动子进程pw,写入pw.start()#等待pw结束pw.join()#启动子进程pr,读取pr.start()pr.join()print("所有数据都写入并且读完")

运行结果为:

PutAtoQueuePutBtoQueuePutCtoQueueGetAfromQueueGetBfromQueueGetCfromQueue

所有数据都写入并且读完。

3. 进程池中的Queue

如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息:

RuntimeError: Queue objects should only be shared between processes through inheritance.

#coding=utf-8frommultiprocessingimportManagerfrommultiprocessingimportPoolimportosimporttimeimportrandomdefreader(q):print("reader启动(%d),父进程为(%d)"%(os.getpid(),os.getppid()))foriinrange(q.qsize()):print("reader从Queue获取到的消息时:%s"%q.get(True))defwriter(q):print("writer启动(%d),父进程为(%d)"%(os.getpid(),os.getppid()))foriin"Se7eN_HOU":q.put(i)if__name__=='__main__':print("-------(%d)Start-------"%os.getpid())#使用Manager中的Queue来初始化q=Manager().Queue()po=Pool()#使用阻塞模式创建进程,这样就不需要在reader中使用死循环了,可以让writer完全执行完成后,再用reader去读取po.apply(writer,(q,))po.apply(reader,(q,))po.close()po.join()print("-------(%d)End-------"%os.getpid())

运行结果为:

-------(880)Start-------writer启动(7744),父进程为(880)reader启动(7936),父进程为(880)reader从Queue获取到的消息时:Sreader从Queue获取到的消息时:ereader从Queue获取到的消息时:7reader从Queue获取到的消息时:ereader从Queue获取到的消息时:Nreader从Queue获取到的消息时:_reader从Queue获取到的消息时:Hreader从Queue获取到的消息时:Oreader从Queue获取到的消息时:U-------(880)End-------

相关推荐:

本文链接地址:https://www.jiuchutong.com/zhishi/303746.html 转载请保留说明!

上一篇:Spring Boot 学习笔记(spring boot怎么学)

下一篇:vue虚拟dom和diff算法(vue虚拟domdiff算法)

  • 微信“搜一搜,如何进行关键词布局抢占流量(微信搜一搜广告投放)

    微信“搜一搜,如何进行关键词布局抢占流量(微信搜一搜广告投放)

  • 2021年支付宝怎么交医保缴费(2021年支付宝怎么买福利彩票)

    2021年支付宝怎么交医保缴费(2021年支付宝怎么买福利彩票)

  • OPPO Ace2是挖孔屏还是刘海屏(oppo ace2用的什么屏)

    OPPO Ace2是挖孔屏还是刘海屏(oppo ace2用的什么屏)

  • 苹果8外观多大尺寸(苹果8外观尺寸大小)

    苹果8外观多大尺寸(苹果8外观尺寸大小)

  • 双方都是手机qq可以分享屏幕吗(两个手机等一个qq)

    双方都是手机qq可以分享屏幕吗(两个手机等一个qq)

  • airpods2有电流声(airpods2有电流声可以去售后要钱吗)

    airpods2有电流声(airpods2有电流声可以去售后要钱吗)

  • 美团预约时间可以取消吗(美团预约时间可以提前吗)

    美团预约时间可以取消吗(美团预约时间可以提前吗)

  • 手机字幕是什么(手机里面的字幕是什么意思)

    手机字幕是什么(手机里面的字幕是什么意思)

  • 天猫精灵叫什么唤醒(天猫精灵叫什么名字好听)

    天猫精灵叫什么唤醒(天猫精灵叫什么名字好听)

  • 华为eid有什么用(华为的eid能不能刷高铁)

    华为eid有什么用(华为的eid能不能刷高铁)

  • 赫兹封禁会解除吗(赫兹封禁有什么后果)

    赫兹封禁会解除吗(赫兹封禁有什么后果)

  • 300兆光纤用什么网线(300兆光纤用什么无线网卡)

    300兆光纤用什么网线(300兆光纤用什么无线网卡)

  • 微信运动间隔多久更新(微信运动多久自动刷新一次)

    微信运动间隔多久更新(微信运动多久自动刷新一次)

  • gt手表能打电话吗(gt手表可以打电话吗)

    gt手表能打电话吗(gt手表可以打电话吗)

  • 计算机网络特点是什么(计算机网络特点包括)

    计算机网络特点是什么(计算机网络特点包括)

  • vivo手机强制恢复出厂设置(vivo手机强制恢复)

    vivo手机强制恢复出厂设置(vivo手机强制恢复)

  • 手机杜比是什么意思(手机杜比音效怎么调参数)

    手机杜比是什么意思(手机杜比音效怎么调参数)

  • 小米8来电秀怎么弄(小米来电秀怎么设置自己图片)

    小米8来电秀怎么弄(小米来电秀怎么设置自己图片)

  • 如何将wps文件上传到电脑(如何将wps文件上传到云盘)

    如何将wps文件上传到电脑(如何将wps文件上传到云盘)

  • 手机qq小程序怎么关(手机qq小程序在哪儿)

    手机qq小程序怎么关(手机qq小程序在哪儿)

  • 一加6t语音助手在哪(一加六t语音助手怎么召唤)

    一加6t语音助手在哪(一加六t语音助手怎么召唤)

  • 新版vsco怎么保存配方(vsco如何保存十个以上配方)

    新版vsco怎么保存配方(vsco如何保存十个以上配方)

  • p30有背景虚化功能吗(华为p30背景虚化)

    p30有背景虚化功能吗(华为p30背景虚化)

  • tftp命令  上传及下载文件(tftp传输命令)

    tftp命令 上传及下载文件(tftp传输命令)

  • python缺省参数的使用注意(python缺省函数)

    python缺省参数的使用注意(python缺省函数)

  • 进项税额加计抵减5%
  • 免税收入怎么做账务处理
  • 转让不动产账务处理
  • 票种核定表怎么填写
  • 水电气费用属于固定成本
  • 递延所得税资产和负债怎么计算
  • 高新技术企业认定
  • 制造费用明细账实例图
  • 个人转让著作权交什么税
  • 查增应纳税所得额怎么算
  • 母子公司间资产划拨开免税发票
  • 注册资本低于实际投资
  • 汇算清缴补交需要调报表吗
  • 异地经营需要办什么税务手续?
  • 逾期包装物押金消费税会计分录
  • 纳税人开具发票服务卡到期限了怎么办?
  • 保安服务费可以开具专票吗
  • 建筑业在外地预缴的所得税能退吗
  • 想做边销茶生意?增值税可以这样处理
  • 应税行为扣除额期初余额
  • 电子税务局进项票汇总
  • 赠送视同销售是按照售价还是成本缴纳增值税
  • 计提房产税的会计分录怎样做
  • 购进货物不能抵扣进项税额
  • 退付手续费怎么操作
  • 小规模纳税人免增值税的账务处理
  • php ord
  • 其他应付款转营业外收入合法吗
  • 不动产固定资产标识牌
  • 中文最早出现的时期
  • 踩雷日记:Pytorch mmcv-full简易安装
  • 南美貘叫什么
  • 命令行文本编辑
  • 二季度平均薪酬
  • 增值税普通发票税率
  • 服务费减免税款怎么算
  • 数论电子书下载
  • python replace 多个
  • 2022最新款带采集功能抖音壁纸小程序源码
  • mysqli删除
  • 进项税额转出的进项税额如何处理
  • 含税采购金额怎么算
  • 发票专用章刻制
  • 在工资模块中进行各工资类别间的汇总
  • 进项税额与库存的关系
  • 账本登错账怎么修改
  • 无形资产摊销如何操作
  • 开票软件服务费全额抵扣怎么做账
  • 跨年的应收账款多做了怎么做账
  • 利润相关计算公式是什么
  • 一般纳税人企业所得税税率
  • 建筑工地塔吊租赁会计分录
  • 股票增发给谁
  • sql排序分组
  • mysql安装配置教程5.7.25
  • ffplay播放视频命令
  • win7系统打开网络看不到其他电脑
  • 系统升级为中狼
  • ubuntu 配置
  • mac电池不能被识别吗
  • win7系统打不开浏览器
  • python socket操作
  • cocos2dx schedule
  • cmd命令是干嘛的
  • perl实例
  • linux查找占用磁盘最大文件
  • u盘备份系统操作步骤
  • 开发流程和步骤
  • unity的shader在哪儿
  • jquery插件之家
  • node写自动化脚本
  • unity-chan
  • jquery.browser
  • eclipse的ssh框架搭建
  • 安卓activity和fragment的区别
  • 设置自定义
  • 税收预测的内容
  • 挂车买保险是怎么买的
  • 法人没有实名认证,现在要变更,还需要实名认证吗
  • 甘肃省契税征收标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设