位置: IT常识 - 正文

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

发布时间:2024-01-21

推荐整理分享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算法)

  • 学生资质绑定后可以直接刷身份证吗(学生资质绑定后多久生效)

    学生资质绑定后可以直接刷身份证吗(学生资质绑定后多久生效)

  • ppt为什么是兼容模式

    ppt为什么是兼容模式

  • 滴滴顺风车上线城市(滴滴顺风车上线账号封禁)

    滴滴顺风车上线城市(滴滴顺风车上线账号封禁)

  • 551怎么删除成员(551家庭网怎么删除成员)

    551怎么删除成员(551家庭网怎么删除成员)

  • soul账号为什么会封(soul账号为什么会进入安全期)

    soul账号为什么会封(soul账号为什么会进入安全期)

  • xr进水面容不能用了怎么办(xr进水面容不能用了维修多少钱)

    xr进水面容不能用了怎么办(xr进水面容不能用了维修多少钱)

  • 微信互删了为什么还看得到评论(微信互删了为什么还能看到对方的评论)

    微信互删了为什么还看得到评论(微信互删了为什么还能看到对方的评论)

  • 美版苹果11和国行有什么区别(美版苹果11和国版苹果12的卡槽可以换的吗)

    美版苹果11和国行有什么区别(美版苹果11和国版苹果12的卡槽可以换的吗)

  • 为什么苹果前置摄像头会闪红光(为什么苹果前置不能放大)

    为什么苹果前置摄像头会闪红光(为什么苹果前置不能放大)

  • 苹果x屏幕刷新率(苹果手机屏幕刷新率在哪里设置)

    苹果x屏幕刷新率(苹果手机屏幕刷新率在哪里设置)

  • 亲情守护设备离线是什么意思(亲情守护结束运行会怎么样)

    亲情守护设备离线是什么意思(亲情守护结束运行会怎么样)

  • iphone在线啥意思(iphone在线是什么)

    iphone在线啥意思(iphone在线是什么)

  • iphone7能用移动卡吗(苹果7支持移动吗)

    iphone7能用移动卡吗(苹果7支持移动吗)

  • 拼多多免拼单在哪里找(拼多多订单免拼)

    拼多多免拼单在哪里找(拼多多订单免拼)

  • vivox27可以刷脸吗(vivox27有刷脸识别功能么)

    vivox27可以刷脸吗(vivox27有刷脸识别功能么)

  • 大王卡怎么激活应用宝(腾讯大王卡怎么激活)

    大王卡怎么激活应用宝(腾讯大王卡怎么激活)

  • qq友谊的小船是单向还是双向(qq友谊的小船是单向)

    qq友谊的小船是单向还是双向(qq友谊的小船是单向)

  • 剪映怎么剪音乐(剪映怎么剪音乐后半段)

    剪映怎么剪音乐(剪映怎么剪音乐后半段)

  • airpods怎么更新固件(AirPods怎么更新测试版固件)

    airpods怎么更新固件(AirPods怎么更新测试版固件)

  • 135编辑器怎么保存(135编辑器怎么保存个人模板)

    135编辑器怎么保存(135编辑器怎么保存个人模板)

  • vivox9puls有没有nfc功能(vivox9splus有nfc)

    vivox9puls有没有nfc功能(vivox9splus有nfc)

  • qq大火花掉了怎么恢复(qq大火花掉了怎么回事)

    qq大火花掉了怎么恢复(qq大火花掉了怎么回事)

  • vivos1处理器是多少(vivos1处理器相当于骁龙多少)

    vivos1处理器是多少(vivos1处理器相当于骁龙多少)

  • 锯齿原野中的Baron湖,爱达荷州 (© Patrick Brandenburg/Tandem Stills + Motion)(原版锯齿)

    锯齿原野中的Baron湖,爱达荷州 (© Patrick Brandenburg/Tandem Stills + Motion)(原版锯齿)

  • 合同中增值税税率怎么描述
  • 延期缴税申请需要先申报吗?
  • 消费税计算时的进项税额
  • 年底企业所得税计提少了
  • 金税三期是什么意思
  • 金税盘付费
  • 生产过程中报废怎么核算成本
  • 高工资怎么说
  • 销售合同印花税计税依据及税率
  • 住宿业的配套服务有哪些
  • 企业出售固定资产取得的净收益应列入的利润表项目是
  • 税务发票原件
  • 销售固定资产的收入计入什么科目
  • 开普票税率怎么算
  • 公司收到个人的款怎么做账务处理
  • windows7怎么说
  • 可转债 承销
  • php获取图片
  • uc浏览器缓存视频删除了还占内存
  • 防水工程质量问题
  • 公司过节发红包怎么入账
  • 小规模纳税人按季度申报
  • web十六进制颜色
  • php 调试工具
  • 季度所得税表中营业收入填万元还是总金额
  • 圣米厄尔教堂
  • 融资租赁的固定资产所有权归谁
  • 房产税土地税用不用计提
  • php+ mysql教程
  • php常用类
  • 如何成功安装暗区突围
  • High-resolution image reconstruction with latent diffusion models from human brain activity
  • 计算机视觉项目队友只让你打标签是什么意思
  • matlab基础介绍
  • 利用php抓取蜘蛛网
  • hostnamectl命令
  • wordpress怎么用
  • MYSQL数据库设计与应用第二版
  • 报销有专票和普票,怎么出分录
  • 兼职人员的工资需要发票吗
  • 怎么计算城市
  • 农产品税率2020年计算
  • 包装物的账务处理例题
  • 食堂采购原材料怎么在赣溯源备案
  • 公司缴纳社保会计分录怎么做
  • 借款可以抵扣企业所得税
  • 残保金申报常见问题
  • 外国人避税
  • 转出上年的进项税怎么算
  • 汇算清缴退税分录
  • 投资性房地产转换日的确定
  • 折扣的种类有哪几种
  • 厂房装修费用账务处理
  • 政府专款专用
  • 暂估成本比实际高分录
  • 商品未入库直接销售怎么记账
  • 平销返利销项税
  • 计提附加税减半征收会计分录
  • 对公账户 取款
  • 劳务派遣服务怎么做会计分录
  • 如何办icp许可证
  • sql server 数据库介绍
  • sql优化的一般步骤
  • 检查mysql是否正常
  • sql server使用教程
  • macos越狱教程
  • Ubuntu 12.04安装Xen常见问题及解决方法汇总
  • windows8启动项在哪里
  • linux shell 数字转字符串
  • win10win8双系统
  • cocos2d-x教程
  • ExtJS 2.0实用简明教程之应用ExtJS
  • javascript数组去重代码
  • android 中 EditText加入图标 更改边框颜色 设置透明
  • asm/semaphore.h: No such file or directory
  • Android platform build guide for Exynos-4412(odroid -X/X2/U2/U3/Q2/Q)
  • html微信
  • 猫的喵喵
  • 四川农村信用社电话
  • 环保标识码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号