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

  • vivo手机深色模式如何设置(vivo手机深色模式怎么关闭)

    vivo手机深色模式如何设置(vivo手机深色模式怎么关闭)

  • 苹果手机拍照有黑斑(苹果手机拍照有斑值得买吗)

    苹果手机拍照有黑斑(苹果手机拍照有斑值得买吗)

  • med-al00是华为什么型号(med-al00是华为什么型号处理器)

    med-al00是华为什么型号(med-al00是华为什么型号处理器)

  • 华为手机怎么把两张图片合成一张(华为手机怎么把旧手机导入新手机)

    华为手机怎么把两张图片合成一张(华为手机怎么把旧手机导入新手机)

  • 抖音怎么拍不了视频了(抖音怎么拍不了同款)

    抖音怎么拍不了视频了(抖音怎么拍不了同款)

  • 微信自动支付腾讯会员怎么取消(微信自动支付扣款)

    微信自动支付腾讯会员怎么取消(微信自动支付扣款)

  • 苹果11有哪些功能(苹果11哪些功能比较强大)

    苹果11有哪些功能(苹果11哪些功能比较强大)

  • 苹果8要不要升级ios13

    苹果8要不要升级ios13

  • 笔记本电脑黑屏了怎么办?(笔记本电脑黑屏了但是电源亮着)

    笔记本电脑黑屏了怎么办?(笔记本电脑黑屏了但是电源亮着)

  • 淘宝拒绝退款申请怎么要回钱(淘宝拒绝退款申请有没有影响)

    淘宝拒绝退款申请怎么要回钱(淘宝拒绝退款申请有没有影响)

  • 华为平板掉了能定位吗(华为平板电脑掉了能追踪吗)

    华为平板掉了能定位吗(华为平板电脑掉了能追踪吗)

  • 荣耀20发烫是什么原因(荣耀20发热严重官方回复)

    荣耀20发烫是什么原因(荣耀20发热严重官方回复)

  • iphone11和xs区别(苹果11和xs有什么区别,哪个好)

    iphone11和xs区别(苹果11和xs有什么区别,哪个好)

  • word纸张16开怎么设置(word16开的纸是多大的)

    word纸张16开怎么设置(word16开的纸是多大的)

  • 锁屏键是哪个(联想笔记本电脑锁屏键是哪个)

    锁屏键是哪个(联想笔记本电脑锁屏键是哪个)

  • 手机怎么把照片背景变白(手机怎么把照片缩小到200k)

    手机怎么把照片背景变白(手机怎么把照片缩小到200k)

  • 手机不用膜可以吗(手机不用膜可以用吗)

    手机不用膜可以吗(手机不用膜可以用吗)

  • 苹果网络为什么1x(苹果网络为什么这么卡)

    苹果网络为什么1x(苹果网络为什么这么卡)

  • 华为手机怎么拷贝照片(华为手机怎么拷照片到电脑)

    华为手机怎么拷贝照片(华为手机怎么拷照片到电脑)

  • 电脑显示内存不足怎么回事(电脑显示内存不足怎么清理)

    电脑显示内存不足怎么回事(电脑显示内存不足怎么清理)

  • 华为如何关闭信息提示(华为如何关闭信息)

    华为如何关闭信息提示(华为如何关闭信息)

  • ipad下载的视频在哪里(ipad下载的视频在哪)

    ipad下载的视频在哪里(ipad下载的视频在哪)

  • 电脑病毒是怎么产生的(电脑病毒是怎么入侵的)

    电脑病毒是怎么产生的(电脑病毒是怎么入侵的)

  • 如何使用WPS绘制组织结构图(如何使用wps绘制流程图)

    如何使用WPS绘制组织结构图(如何使用wps绘制流程图)

  • 股东个人房产转入公司契税
  • 不征税收入有哪些增值税
  • 企业增值税免税需要备案吗
  • 税负统计口径
  • 城镇土地使用税的计算公式
  • 公司购买金蝶属于什么费用
  • 税金及附加和应交税费的关系
  • 应纳税额与应纳税额差额
  • 应收款项出售的分录怎么处理
  • 进项税额有留底怎么做分录
  • 员工交通费属于什么费用
  • 总分类一般采用什么格式
  • 保险的月缴纳可以调整么?
  • 如何查询对方是不是老赖
  • 企业租车费可以抵扣吗
  • 出口业务具体流程图
  • 2020年小规模生活服务业优惠政策
  • 如何利用成套消费品进行纳税筹划
  • 固定资产大修理和更新改造的区别
  • 丧失控制权合并报表内部交易抵消
  • win11任务栏如何设置在最左边
  • 如何禁用bios里的secure boot
  • 安装监控违法吗
  • 工人的意外险如何赔付
  • 基本户是否可以冻结
  • 赠与合同任意撤销与法定撤销的区别
  • 初级证书多长时间可以领取?
  • win7为什么还有人用
  • 0x00000024蓝屏怎样解决
  • 年度企业所得税汇算清缴会计分录怎么做
  • 残疾人就业保障金怎么申报
  • 谷歌网页小恐龙
  • php deprecated
  • 安装win7提示版本过低
  • 原始凭证和审计证据的关系
  • 企业的组织形式共5种
  • 个税手续费会计分录
  • 从网上学电脑下载什么软件
  • 普通增值发票可以抵扣进项税吗
  • 建筑企业跨地区经营企业所得税
  • 关联企业利息费用债资比
  • 企业向银行借入长期借款,应借记
  • 支付宝企业账户怎么注销
  • 通信服务费账务处理流程
  • 软件研发的整个流程
  • 城市基础设施配套费征收管理规定
  • 房屋开发企业
  • 应收分保未到期责任准备金是什么科目
  • 关联交易现金流
  • 资本公积转为实收资本会计科目
  • 企业注销留抵税额怎么处理 最新
  • 减免所得税额a201030怎么填
  • 如何查询一个企业的纳税情况
  • 建筑企业案例
  • 企业被收购的账务处理
  • 怎样计算存款利息?
  • 获取sqlsession
  • sqlserver全文索引
  • 不同数据库之间的数据一同传递
  • macbook开机壁纸怎么设置
  • win7音量图标不能启用
  • win10开始菜单在哪
  • islp2sta.exe - islp2sta是什么进程 有什么作用
  • Linux dpkg-query 命令用法详解(Debian Linux中软件包的查询工具)
  • Win10专业版21h2
  • linux的命令行怎么打开
  • linux learn
  • js里的this指向
  • 安卓好用的倒计时
  • 常用at命令集
  • linux安装oracle数据库步骤
  • vue打包页面空白
  • android基础教程
  • unity 更新
  • javascript开发基础
  • python井字游戏
  • javascript教程完整版
  • android开发范例实战宝典
  • 青岛新农合网上缴费时间
  • 烟台税务查询系统网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设