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

  • 全民消防安全平台怎么退出登录(全民消防安全平台下载安装)

    全民消防安全平台怎么退出登录(全民消防安全平台下载安装)

  • 视频帧率越高越好吗(视频帧率越高越好还是越低越好)

    视频帧率越高越好吗(视频帧率越高越好还是越低越好)

  • 手机进水了怎么处理(手机进水了怎么处理比较好)

    手机进水了怎么处理(手机进水了怎么处理比较好)

  • qq号注销后还可以恢复吗(qq号注销后还可以申请新号码吗)

    qq号注销后还可以恢复吗(qq号注销后还可以申请新号码吗)

  • realme手机是什么牌子(realme手机官网)

    realme手机是什么牌子(realme手机官网)

  • 浏览器无痕模式在哪里(浏览器无痕模式有什么用)

    浏览器无痕模式在哪里(浏览器无痕模式有什么用)

  • 苹果7快捷指令在哪(苹果7快捷指令里面没有nfc)

    苹果7快捷指令在哪(苹果7快捷指令里面没有nfc)

  • 腾讯视频qq会员可以同时几个人用(腾讯视频QQ会员怎么多人登录)

    腾讯视频qq会员可以同时几个人用(腾讯视频QQ会员怎么多人登录)

  • 华为微信聊天如何到顶置(华为微信聊天如何开启美颜)

    华为微信聊天如何到顶置(华为微信聊天如何开启美颜)

  • qq邮箱邮件加载失败怎么办(qq邮箱加载失败是什么原因)

    qq邮箱邮件加载失败怎么办(qq邮箱加载失败是什么原因)

  • 电脑卡的原因(电脑卡的原因是因为cpu还是显卡)

    电脑卡的原因(电脑卡的原因是因为cpu还是显卡)

  • 后壳开胶会影响手机吗(后壳开胶会影响保修吗)

    后壳开胶会影响手机吗(后壳开胶会影响保修吗)

  • 抖音的赞怎么变少了(抖音的赞怎么变成抱抱)

    抖音的赞怎么变少了(抖音的赞怎么变成抱抱)

  • 电脑怎么回到桌面(电脑怎么可以回到桌面)

    电脑怎么回到桌面(电脑怎么可以回到桌面)

  • word文档如何单页显示(word文档如何单独修改页眉)

    word文档如何单页显示(word文档如何单独修改页眉)

  • a2197是ipad几代(a2197是ipad几代拆机视频)

    a2197是ipad几代(a2197是ipad几代拆机视频)

  • 为什么趣键盘表情消失了(为什么趣键盘突然打不开了)

    为什么趣键盘表情消失了(为什么趣键盘突然打不开了)

  • 蓝牙耳机tws是什么意思(tws蓝牙耳机百度百科)

    蓝牙耳机tws是什么意思(tws蓝牙耳机百度百科)

  • 电话手表sos怎么用(电话手表sos紧急求救是哪个按键)

    电话手表sos怎么用(电话手表sos紧急求救是哪个按键)

  • 图面路况播报是什么意思(图面路况播报是什么)

    图面路况播报是什么意思(图面路况播报是什么)

  • end是哪个键(键盘end是哪个键)

    end是哪个键(键盘end是哪个键)

  • python多线程和多进程(python多线程和多协程对比)

    python多线程和多进程(python多线程和多协程对比)

  • 青桔单车定位装置在哪(青桔电单车定位装置在哪)

    青桔单车定位装置在哪(青桔电单车定位装置在哪)

  • 爱奇艺怎么设置不息屏(爱奇艺怎么设置时间限制)

    爱奇艺怎么设置不息屏(爱奇艺怎么设置时间限制)

  • 快手直播没有声音怎么设置(快手直播没有声音在哪里可以打开)

    快手直播没有声音怎么设置(快手直播没有声音在哪里可以打开)

  • 2023年美赛春季赛 赛题浅析(2023年美赛春季赛成绩查询)

    2023年美赛春季赛 赛题浅析(2023年美赛春季赛成绩查询)

  • 帝国cms怎么百度自动提交(帝国cms视频教程)

    帝国cms怎么百度自动提交(帝国cms视频教程)

  • 印花税的申报依据是什么
  • 税务登记财务负责人可以是法人吗
  • 小规模出租不动产免税吗
  • 子母公司有连带责任吗
  • 支付土地使用权的会计处理
  • 小规模纳税人费用票怎么做账
  • 2018年小规模优惠政策
  • 进口报关手续费
  • 溢价发行债券的发行价格怎么计算的
  • 委托、受托出口做账有哪些事项?
  • 库存红字冲销
  • 企业所得税季度预缴
  • 公司经营情况说明怎么写模板
  • 津贴证明是让单位开吗
  • 食堂外包服务费可以抵扣进项税吗
  • 收到注册资本需要开发票么
  • 房地产企业土地出让金抵减销项税额
  • 关于获得政府补助的公告
  • vscode国内镜像
  • win10无法上网,显示灰色的飞行模式
  • 职工教育经费怎么记账
  • php 替换字符
  • Win10 Build 19044.1319(21H1)预览版发布:修复 Bug提高安全性
  • kb4580419更新
  • 宽带连接错误代码691
  • 事业单位专项资金包括哪些内容
  • 电脑时间同步不了解决方法
  • php解析html文件
  • PHP:imagecreatefromwebp()的用法_GD库图像处理函数
  • php调用ffmpeg实现切片
  • HBuilderX uni-app简单实现静态登录页面(实例)
  • 企业资本结构决策需要重点考虑的有
  • php确认弹窗
  • 未税收入怎么做分录
  • 公司注销账面实收资本如何处理
  • 这是我见过最牛的人英语
  • 泛型 static
  • vue好不好学
  • 如何验证工具坐标系
  • date=date
  • netconf over ssh
  • python中字符串的长度怎么算
  • 增值税电子发票怎么领用
  • 回购股票并注销影响所有者权益吗
  • 织梦怎么用模板建站
  • mongodb怎么用
  • 其他应付款转实收资本走什么程序
  • sql 列转行
  • 福利费的进项税怎么做账
  • 商品促销赠品如何分类
  • 未达到起征点的增值税怎么填写
  • 2021年财务报表申报
  • 增值税进项税加计抵减
  • 营业执照经营范围怎么变更
  • 现金支票办理电话
  • mysql查询条件不区分大小写
  • sql2005 create file遇到操作系统错误5拒绝访问 错误1802
  • linux统计重复次数
  • 设备信息windows6.1
  • solaris安装教程
  • win10激活后是什么样子
  • dns server配置
  • win10怎么预览
  • xp系统屏幕倒过来了怎么恢复
  • spamsub.exe - spamsub进程是什么文件
  • searchnav.exe - searchnav是什么进程 有什么用
  • linux 中的MYSQL命令汇总 适合学习linux下配置mysql的朋友
  • win7进入dos的方法
  • win8电脑路由器网络受限怎么办
  • javascript数据结构与算法项目计算找零
  • ExtJS 2.0实用简明教程之应用ExtJS
  • node javascript
  • python如何查看
  • javascript常用的类型包括
  • jquery设置背景颜色
  • 河北税务怎么查询交了没有
  • 四川地方税务局网址是什么
  • 南通 医疗
  • 发票事业单位有税号吗
  • 税务部门意识形态
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设