位置: 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算法)

  • 荣耀30pro支持仿真机械键盘的吗(荣耀30pro可以贴防窥膜吗)

    荣耀30pro支持仿真机械键盘的吗(荣耀30pro可以贴防窥膜吗)

  • 华为p20和荣耀10贴膜一样吗(华为p20和荣耀10膜能通用吗)

    华为p20和荣耀10贴膜一样吗(华为p20和荣耀10膜能通用吗)

  • e5 2660相当于是什么cpu(e5 2660v4相当于)

    e5 2660相当于是什么cpu(e5 2660v4相当于)

  • iphone拒接来电(iphone拒接电话)

    iphone拒接来电(iphone拒接电话)

  • 在word文档中不可直接操作的是(在word文档中不能作为文本转换为表格的分隔符是)

    在word文档中不可直接操作的是(在word文档中不能作为文本转换为表格的分隔符是)

  • 微信浮窗不见了怎么办(微信浮窗不见了怎么找出来)

    微信浮窗不见了怎么办(微信浮窗不见了怎么找出来)

  • 华为能下载两个微信吗(华为能下载两个支付宝吗)

    华为能下载两个微信吗(华为能下载两个支付宝吗)

  • 微信黑夜怎么开启(微信如何开黑夜模式?)

    微信黑夜怎么开启(微信如何开黑夜模式?)

  • 三星9611相当于骁龙多少(三星9611cpu)

    三星9611相当于骁龙多少(三星9611cpu)

  • 苹果11怎么关闭自动亮度(苹果11怎么关闭自动续费)

    苹果11怎么关闭自动亮度(苹果11怎么关闭自动续费)

  • 安卓手机怎么调颜色反转(安卓手机怎么调返回键)

    安卓手机怎么调颜色反转(安卓手机怎么调返回键)

  • qq作业上传视频失败是怎么回事(qq作业上传视频不能超过一分钟)

    qq作业上传视频失败是怎么回事(qq作业上传视频不能超过一分钟)

  • 摄像头电源断了还在监控吗(摄像头电源断了怎么接线)

    摄像头电源断了还在监控吗(摄像头电源断了怎么接线)

  • 苹果8plus怎么插耳机(苹果8plus怎么插有线耳机)

    苹果8plus怎么插耳机(苹果8plus怎么插有线耳机)

  • 一加安卓10更新了什么(一加系统更新10.0.8怎么样)

    一加安卓10更新了什么(一加系统更新10.0.8怎么样)

  • 手机卡被注销了怎么补回来了(手机卡被注销了还能补回来吗)

    手机卡被注销了怎么补回来了(手机卡被注销了还能补回来吗)

  • 手机测距仪怎么使用(手机测距仪怎么打开)

    手机测距仪怎么使用(手机测距仪怎么打开)

  • oppoa57有没有呼吸灯(oppoa57呼叫转移怎么设置方法)

    oppoa57有没有呼吸灯(oppoa57呼叫转移怎么设置方法)

  • 苹果x摄像头白色圈是什么(苹果x后置摄像头全白)

    苹果x摄像头白色圈是什么(苹果x后置摄像头全白)

  • 怎么删除锁屏热点资讯(如何删除锁屏的热点资讯)

    怎么删除锁屏热点资讯(如何删除锁屏的热点资讯)

  • ryzen2600相当于i几(ryzen52600相当于i几)

    ryzen2600相当于i几(ryzen52600相当于i几)

  • 抖音作品审核中怎么回事(抖音作品审核中怎么回事 赶紧隐藏)

    抖音作品审核中怎么回事(抖音作品审核中怎么回事 赶紧隐藏)

  • oppor15梦境版和星云版的区别(oppor15梦境版和r15x哪个好)

    oppor15梦境版和星云版的区别(oppor15梦境版和r15x哪个好)

  • 如何恢复电脑原始桌面(如何恢复电脑原来桌面)

    如何恢复电脑原始桌面(如何恢复电脑原来桌面)

  • 转转如何发货(转转如何发货后退款)

    转转如何发货(转转如何发货后退款)

  • 硬盘技术指标(硬盘技术指标包括平均访问时间吗)

    硬盘技术指标(硬盘技术指标包括平均访问时间吗)

  • 轩辕剑字体只显示一半怎么办(轩辕剑3字体)

    轩辕剑字体只显示一半怎么办(轩辕剑3字体)

  • 所得税的会计分录怎么做
  • 应付账款支付时需要付款申请单吗
  • 多交增值税怎么算
  • 车船税发票可以作废吗
  • 居民和企业
  • 所得税预缴申报表资产总额怎么填
  • 累计缴税扣除额
  • 工程会计和工业会计进销项区别是什么
  • 水果销售公司账务怎么做
  • 销售部门快递费用怎么算
  • 调试费含税吗
  • 集团财务公司资金管理
  • 纳税申报的具体流程个体户
  • 销售收入包括应收销货款
  • 应交增值税进项税额转出借贷方向表示什么
  • 签了合同后又要收额外费用
  • 设备免费提供给客户使用
  • 增值税免税收入汇算清缴的时候填哪
  • 小微企业季度所得税怎么计算
  • 增值税专用发票电子版
  • 银行端现金缴税凭证
  • win11开机后
  • 其他应付款不用付了会计分录
  • 企业债券和公司债券
  • 冲回坏账
  • 收到合同款
  • PHP:mb_ereg_search_regs()的用法_mbstring函数
  • 小米路由器开启ssh后怎么安装插件
  • 结转代销产品成本会计分录
  • newacs.exe是什么进程
  • laravel dump
  • 发票上可以盖财务专用章和发票专用章吗
  • 建筑安装企业核定征收企业所得税
  • 什么是长期应付票据
  • 人工智能ai软件免费版app
  • 现金流量风险怎么解决
  • 货物入库会计分录怎么做
  • 增值税普通发票查询真伪
  • php decbin
  • rhel6安装教程
  • 合同负债算负债吗
  • 劳务公司属于什么
  • 珠宝首饰可以开发票吗
  • 金税盘全额抵扣申报表怎么填
  • 未分配利润可以弥补亏损吗
  • 民办非盈利组织注销了在哪登报
  • 结转收入及成本费用
  • excel账务处理心得
  • 工会经费记在什么科目
  • 转出未交增值税借方余额表示什么
  • 库存现金盘点表模板
  • 增值税发票超过多久不能抵扣
  • 买二手办公用品
  • 人工费怎么核算
  • 资产减值损失审计程序是什么
  • ubuntu16.04.1下 mysql安装和卸载图文教程
  • win7旗舰版系统还原无法启动
  • igfxsrvc module
  • ubuntu16安装vnc
  • ubuntu zed
  • linux删除u盘记录
  • 苹果电脑bim
  • centos6.5怎么进入图形界面
  • win10 开始
  • win8怎么进去安全系统
  • win7系统通过wmic命令
  • linux解密
  • android base64传图片
  • ghost32命令参数
  • 批处理命令不允许用户在文件夹内的文件
  • 浏览器检测js代码
  • javascript基础书
  • JavaScript replace(rgExp,fn)正则替换的用法
  • javascript中的函数该如何理解
  • 如何在电子税务局添加办税人员
  • 重庆市国家税务局电话
  • 改税务报表会有限风险吗
  • 请问各位专家金线吊乌龟有什么功效
  • 沧州市养老保险局官网
  • 税务申报系统出现异常怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设