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

  • 爱奇艺连续包年可以随时取消吗(爱奇艺连续包年是多久)

    爱奇艺连续包年可以随时取消吗(爱奇艺连续包年是多久)

  • opporoot权限怎么开启(opporoot权限怎么开启ROOT)

    opporoot权限怎么开启(opporoot权限怎么开启ROOT)

  • word红色底纹怎么设置(word中红色底纹)

    word红色底纹怎么设置(word中红色底纹)

  • 华为手机锁屏图片怎么关闭(华为手机锁屏图片)

    华为手机锁屏图片怎么关闭(华为手机锁屏图片)

  • 芒果微信会员怎样共享呢(芒果微信会员怎么取消自动续费)

    芒果微信会员怎样共享呢(芒果微信会员怎么取消自动续费)

  • 电脑主机后面的插孔分别是什么(电脑主机后面的音频插孔图)

    电脑主机后面的插孔分别是什么(电脑主机后面的音频插孔图)

  • 淘宝618什么时间开始(淘宝618什么时间段最便宜)

    淘宝618什么时间开始(淘宝618什么时间段最便宜)

  • 手机可以下载word文档吗(手机可以下载word2016吗)

    手机可以下载word文档吗(手机可以下载word2016吗)

  • 3dmax放大一个窗口快捷键(3ds max怎么放大窗口)

    3dmax放大一个窗口快捷键(3ds max怎么放大窗口)

  • 苹果11双摄像头为什么只有一个可以用(苹果11双摄像头怎么使用)

    苹果11双摄像头为什么只有一个可以用(苹果11双摄像头怎么使用)

  • 摄像头自带wifi热点什么意思(摄像头自带wifi热点密码是多少)

    摄像头自带wifi热点什么意思(摄像头自带wifi热点密码是多少)

  • 手机排线松了怎么修(手机排线松了怎么急救苹果)

    手机排线松了怎么修(手机排线松了怎么急救苹果)

  • 荣耀30s摄像头是索尼的吗(荣耀30s摄像头是什么型号)

    荣耀30s摄像头是索尼的吗(荣耀30s摄像头是什么型号)

  • 手机耗电比充电快怎么办(手机耗电比充电快怎么办华为)

    手机耗电比充电快怎么办(手机耗电比充电快怎么办华为)

  • 爱奇艺清晰度在哪设置(爱奇艺清晰度在哪里调)

    爱奇艺清晰度在哪设置(爱奇艺清晰度在哪里调)

  • 删除苹果自带软件后果(删除苹果自带软件可以增加内存吗)

    删除苹果自带软件后果(删除苹果自带软件可以增加内存吗)

  • 华为怎么调节屏幕灭屏时间(华为怎么调节屏幕灵敏度)

    华为怎么调节屏幕灭屏时间(华为怎么调节屏幕灵敏度)

  • 预售商品怎么放入购物车(预售商品怎么放入购物车?)

    预售商品怎么放入购物车(预售商品怎么放入购物车?)

  • 淘宝会员id在哪里查看(淘宝的会员id是指什么)

    淘宝会员id在哪里查看(淘宝的会员id是指什么)

  • 优活手环电源怎么打开(优活手环怎样充电)

    优活手环电源怎么打开(优活手环怎样充电)

  • 荣耀9x怎么设置人脸识别(荣耀9x怎么设置底部三个键)

    荣耀9x怎么设置人脸识别(荣耀9x怎么设置底部三个键)

  • 支付宝为什么不送流量了(支付宝为什么不能加好友)

    支付宝为什么不送流量了(支付宝为什么不能加好友)

  • 水印相机怎么写字(水印相机怎么写文字)

    水印相机怎么写字(水印相机怎么写文字)

  • 苹果7描述文件与设备管理找不到(苹果7描述文件在哪里找到)

    苹果7描述文件与设备管理找不到(苹果7描述文件在哪里找到)

  • switch连不上热点原因(switch连不上热点怎么办)

    switch连不上热点原因(switch连不上热点怎么办)

  • 图虫怎么保存视频 电影(图虫的视频怎么导出)

    图虫怎么保存视频 电影(图虫的视频怎么导出)

  • 光纤的数值孔径(单模光纤的数值孔径)

    光纤的数值孔径(单模光纤的数值孔径)

  • 大二一个学期学这么点内容,没有概念,只有实操(大二一学期学分多少合适)

    大二一个学期学这么点内容,没有概念,只有实操(大二一学期学分多少合适)

  • 房屋租赁如何开增值税专用发票
  • 资源税的纳税期限包括
  • 法人个人账户收款是否属于公司业务
  • 油补是福利费还是工资
  • 发票认证了申报系统没有数据
  • 软件 折旧年限
  • 普通发票金额和申报工资有关系吗
  • 固定资产盘点账务处理
  • 小规模纳税人开票税率
  • 留抵税额账上比申报表多
  • 城建税和教育附加税
  • 金银首饰在哪个平台买比较好
  • 进口贴息对企业的好处
  • 企业购入车辆会计分录
  • 机械租赁增值税税率2022年
  • 当月进项税额大于销项税额
  • 合作社增值税免税项目
  • 支付本月租金计入什么科目
  • 公众号注册验证方式
  • 出口退税转为免税
  • 公司出差开自己的车怎么计算损耗
  • 预付账款金额过大的原因
  • 增值税预缴表填写模板
  • 工程领用工程物资180万元
  • 营改增房租增值税税率
  • 投资协议需要注意细节
  • 转让股权应具备什么条件
  • 上月销项税额错了怎么修改凭证?
  • 资产评估溢价部分如何处理?
  • 公益捐赠税前扣除政策
  • 工会经费的开支必须取得发票么
  • 企业外购材料的入账价值包括
  • 公司不盈利用交税吗
  • 坏账准备的计提应当关注
  • 银行透支算资产吗
  • 即征即退申报表模版
  • Omniserv.exe - Omniserv是什么进程 有什么用
  • 存货成本要加上税费吗
  • 在产品定额工时怎么算
  • 业务招待费的纳税筹划
  • Java8 Stream流Collectors.toMap当key重复时报异常(IllegalStateException)
  • 非合理损耗计入入账成本吗
  • 小规模与一般纳税人做账区别
  • thinkphp import
  • electronx
  • 预缴的附加税怎么填表抵减
  • 买过来的土地可以确权吗
  • thinkphp log
  • id3决策树伪代码
  • 魔改是啥
  • 快递代收费用是多少
  • 免收印花税
  • 织梦模板如何安装
  • 织梦如何使用
  • 生产车间劳务费会计分录
  • 小规模纳税人免税怎么做账
  • 转让无形资产使用权
  • 车船税每年都是一样的吗
  • 赠送的商品如何开发票
  • 保本理财产品如何赎回
  • 稳岗补贴如何入账
  • 企业收到补贴资金怎么办
  • 成本发票怎么入账
  • 工程竣工后发生工程的保修费用入哪个科目?
  • 塑料制品厂设计
  • sqlserver多表关联查询
  • win10系统中怎么安装安卓应用
  • php创建注释的方法
  • 寒江孤影原文
  • linux命令shell脚本
  • unity人物面板
  • 安卓桌面照片插件
  • android程序代码
  • 税收效应分析供求曲线
  • 一般纳税人出售房产怎么开票
  • 河南税务报到
  • 辽宁省国家税务局官网
  • 国税总局关于总局的文件
  • 扬州地方税务局在哪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设