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

  • 怎样才能把自己的微信推广出去呢(怎样才能把自己的心态调理好)

    怎样才能把自己的微信推广出去呢(怎样才能把自己的心态调理好)

  • 微信如何授权抖音登录(微信如何授权抖音绑定微信)

    微信如何授权抖音登录(微信如何授权抖音绑定微信)

  • 荣耀x30i语音助手怎么唤醒(荣耀x30i语音助手可以直接语音唤醒吗)

    荣耀x30i语音助手怎么唤醒(荣耀x30i语音助手可以直接语音唤醒吗)

  • 重装系统所有的东西都会被删除吗(系统里重装系统)

    重装系统所有的东西都会被删除吗(系统里重装系统)

  • 一加x手机上市时间(一加新款手机什么时候上市)

    一加x手机上市时间(一加新款手机什么时候上市)

  • apple怎么截屏(如何截屏apple)

    apple怎么截屏(如何截屏apple)

  • 网易云如何切换登录(网易云如何切换账号)

    网易云如何切换登录(网易云如何切换账号)

  • qq可能认识的人来源哪(qq可能认识的人在哪里看)

    qq可能认识的人来源哪(qq可能认识的人在哪里看)

  • 美版a1920支持电信吗(美版a1920是s版吗)

    美版a1920支持电信吗(美版a1920是s版吗)

  • 微信收款收多了会封号吗(微信收款收多了会怎么样)

    微信收款收多了会封号吗(微信收款收多了会怎么样)

  • 腾讯课堂多久后有回放(腾讯课堂多久后能看回放)

    腾讯课堂多久后有回放(腾讯课堂多久后能看回放)

  • p30后面几个摄像头(华为p30后置摄像头有几个)

    p30后面几个摄像头(华为p30后置摄像头有几个)

  • 笔记本电脑扩展坞是什么东西(笔记本电脑扩展屏幕后没声音了)

    笔记本电脑扩展坞是什么东西(笔记本电脑扩展屏幕后没声音了)

  • 路由器断电多久算重启(路由器断电多久会刷新ip)

    路由器断电多久算重启(路由器断电多久会刷新ip)

  • iphone11和xr分辨率一样吗(xr和11的分辨率一样吗)

    iphone11和xr分辨率一样吗(xr和11的分辨率一样吗)

  • 朋友圈翻译对方能看到吗(微信朋友圈翻译对方能看到吗)

    朋友圈翻译对方能看到吗(微信朋友圈翻译对方能看到吗)

  • ipad怎么长截图(iPad怎么长截图屏幕)

    ipad怎么长截图(iPad怎么长截图屏幕)

  • 手机卡怎么查号码(手机卡怎么查号码归属地)

    手机卡怎么查号码(手机卡怎么查号码归属地)

  • 怎么找淘宝小二介入(闲鱼纠纷怎么找淘宝小二)

    怎么找淘宝小二介入(闲鱼纠纷怎么找淘宝小二)

  • 手机怎么制作动态相册(手机怎么制作动漫视频)

    手机怎么制作动态相册(手机怎么制作动漫视频)

  • 美图秀秀怎么换背景(美图秀秀怎么换脸p图)

    美图秀秀怎么换背景(美图秀秀怎么换脸p图)

  • css超链接字体颜色(css超链接字体颜色怎么设置)

    css超链接字体颜色(css超链接字体颜色怎么设置)

  • 考研取消报名会退钱吗(考研取消报名会不会退钱)

    考研取消报名会退钱吗(考研取消报名会不会退钱)

  • vivo手机怎样退出sos(vivo手机怎样退出盲人模式)

    vivo手机怎样退出sos(vivo手机怎样退出盲人模式)

  • 小米8青春版可以分屏吗(小米8青春版可以用电信卡吗?)

    小米8青春版可以分屏吗(小米8青春版可以用电信卡吗?)

  • backupnotify.exe是什么文件的进程 backupnotify进程安全吗

    backupnotify.exe是什么文件的进程 backupnotify进程安全吗

  • 电脑桌面换壁纸的图片教程(电脑桌面换壁纸的软件)

    电脑桌面换壁纸的图片教程(电脑桌面换壁纸的软件)

  • 公司购买二手房可以开增值税专用发票吗
  • 城建税会计分录怎么写
  • 一般纳税人材料销售税率
  • 贴现怎么计算公式
  • 缴纳以前年度所得税在今年汇算清缴怎么填报
  • 小规模纳税人注册资金最高多少
  • 怎么理解财务会计与管理会计
  • 未确认融资收益怎么算
  • 什么情况下要交个人所得纳税
  • 外经证缴纳个税流程
  • 简易征收的项目是否可以实行30万免税
  • 冲销管理费用如何计算
  • 药品回扣2021
  • 外贸公司的出口清单
  • 增值税销项发票冲红怎么冲
  • 承接所有业务
  • 地址变更工商局上门检查
  • 园林绿化工程税点
  • 营改增开始试点到普及的行业
  • 被吊销营业执照的公司如何注销
  • 购车保险属于什么费用
  • 申报更正退税增值税申报表如何反应
  • 设备器具一次性扣除会计分录
  • windows10如何设置桌面背景
  • win10如何获得管理员权限修改文件
  • 苹果电脑删除win系统文件
  • mac锁屏屏保
  • 个税手续费返还要交企业所得税吗
  • win11安装失败0xc1900201
  • 鸿蒙3.0内测申请成功显示名额已满
  • 关闭windows defender实时防护
  • uniapp全局对象
  • 如何安装纯净win10
  • 房地产公司股权收购
  • PHP:json_last_error()的用法_JSON函数
  • 取得短期借款会计科目
  • 收外汇怎么做账报税
  • 增值税加计扣除最新政策
  • 哪些情况下公司不能辞退员工
  • 退款会退货吗
  • idea如何运行vue项目
  • 甲方如何规避合同责任
  • 小规模纳税人要交企业所得税吗?
  • 没有抄报税就申报了怎么办
  • 税控开票清单
  • 机票退票手续费新规定2023
  • 会计信息不采集有什么后果
  • 公司的零星开支是什么
  • 金税三期个人所得税申报
  • 发票校验码被章盖住了
  • 净资产包含哪些方面
  • 辅助账簿属于会计档案吗
  • 入库的残料价值包括哪些
  • 待认证进项税额认证以后怎么做分录
  • 购买办公用品如何节约成本
  • 金银首饰以旧换新增值税处理
  • 股东往来款算投资款吗
  • 税务突然查账
  • 借款后的报销流程怎么写
  • 个体工商户是否要交税
  • 调整去年管理费用怎么做分录
  • Windows Server 2008下高效域管理体验
  • 微软平板电脑surface pro2参数
  • linux mv命令详解
  • DWHeartbeatMonitor.exe进程是什么意思 DWHeartbeatMonitor是安全的进程吗
  • camrec是什么文件
  • 苹果mac系统怎么截屏快捷键
  • 修改注册表优化Win10
  • win10通过任务管理器打开设置
  • win8.1应用商店无法打开
  • linux 查找语句
  • shell 递归
  • javascript ES6 新增了let命令使用介绍
  • javascript边框
  • jquery 表格插件
  • jquery数组的方法
  • 利用html css javascript做一个网页
  • 江西省发票查询系统
  • 租车费为何不能抵扣
  • 江苏国家税务局电子税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设