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

  • 传统企业怎样突围互联网壁垒(传统企业如何链改)

    传统企业怎样突围互联网壁垒(传统企业如何链改)

  • vivox70pro+怎么打开nfc(vivox70pro怎么打开开发者选项)

    vivox70pro+怎么打开nfc(vivox70pro怎么打开开发者选项)

  • 腾讯会议如何看回放(腾讯会议如何看回放直播)

    腾讯会议如何看回放(腾讯会议如何看回放直播)

  • 开机之后黑屏(电脑开机之后黑屏)

    开机之后黑屏(电脑开机之后黑屏)

  • Word全文行距怎么设置(word全文行距怎么设置)

    Word全文行距怎么设置(word全文行距怎么设置)

  • 三星为什么叫安卓机皇(三星为什么称为安卓机皇)

    三星为什么叫安卓机皇(三星为什么称为安卓机皇)

  • 音乐包和vip区别(音乐包和vip区别网易云)

    音乐包和vip区别(音乐包和vip区别网易云)

  • 苹果10屏幕多大尺寸(苹果屏幕多大尺寸)

    苹果10屏幕多大尺寸(苹果屏幕多大尺寸)

  • ios13.3分屏功能怎么用(ios13.4分屏)

    ios13.3分屏功能怎么用(ios13.4分屏)

  • qq怎么开小号不用手机号码(qq怎么开小号不用好友辅助验证)

    qq怎么开小号不用手机号码(qq怎么开小号不用好友辅助验证)

  • word文档怎么改文件名(word文档怎么改文件名称)

    word文档怎么改文件名(word文档怎么改文件名称)

  • 怎样设置钉钉接收信息有声音(怎样设置钉钉接龙添加照片)

    怎样设置钉钉接收信息有声音(怎样设置钉钉接龙添加照片)

  • ps怎么填充颜色(手机wps怎么填充颜色)

    ps怎么填充颜色(手机wps怎么填充颜色)

  • 手环屏幕有水雾怎么办(手环屏幕里面有水蒸气)

    手环屏幕有水雾怎么办(手环屏幕里面有水蒸气)

  • 8p充满电用多久算正常(苹果8p手机充满电用几个小时)

    8p充满电用多久算正常(苹果8p手机充满电用几个小时)

  • 苹果webkit可以全开吗(苹果webkit功能全部打开好吗)

    苹果webkit可以全开吗(苹果webkit功能全部打开好吗)

  • 苹果6卡贴机sim卡无效(苹果6卡贴机怎么激活sim卡)

    苹果6卡贴机sim卡无效(苹果6卡贴机怎么激活sim卡)

  • 如何设置等长下划线(设置为等宽的两栏怎么设置)

    如何设置等长下划线(设置为等宽的两栏怎么设置)

  • 手机云空间在哪里找(华为荣耀手机云空间在哪)

    手机云空间在哪里找(华为荣耀手机云空间在哪)

  • Watch GT2怎么刷公交(gt2手表如何刷地铁)

    Watch GT2怎么刷公交(gt2手表如何刷地铁)

  • 酷狗直播电脑开播步骤(酷狗直播电脑开播健在哪里)

    酷狗直播电脑开播步骤(酷狗直播电脑开播健在哪里)

  • 无法设置面容id(面容id不可用稍后尝试设置面容id)

    无法设置面容id(面容id不可用稍后尝试设置面容id)

  • 拼多多买完东怎删除(拼多多买完东西如何退款)

    拼多多买完东怎删除(拼多多买完东西如何退款)

  • 小米8otg在哪里设置(小米8OTG在哪里设置)

    小米8otg在哪里设置(小米8OTG在哪里设置)

  • 心绞痛的早期症状有哪些?(心绞痛的早期症状表现有哪些)

    心绞痛的早期症状有哪些?(心绞痛的早期症状表现有哪些)

  • 编译报错:Module parse failed: Unexpected token (18:41)(编译报错place 30-681)

    编译报错:Module parse failed: Unexpected token (18:41)(编译报错place 30-681)

  • 公司租赁个人车辆税率是多少
  • 应交税费是什么科目
  • 资产减值准备的计提方法
  • 公司如何做成集团
  • 装修收入如何填报增值税表
  • 存续分立的账务处理
  • 房租违约金收入怎么做账
  • 已经验旧的发票可以作废吗
  • 个人独资企业注册流程
  • 广告合同印花税率怎么算
  • 财产性收入是非劳动性收入吗
  • 销售商品房属于什么税
  • 企业租车接送员工合法吗
  • 资产减值损失结转
  • 固定资产清理如何做账
  • 村集体经济组织法
  • 收回委托加工物资的实际成本
  • 应付账款扣款怎么做账
  • 小规模纳税人开专票税率是1%还是3%
  • 电子钥匙的发票怎么开
  • 工会经费向地方税务局缴纳的比例是多少
  • 电话宽带是什么意思
  • 减税降费政策六税
  • 房地产行业应收帐款周转率平均值
  • 收入准则建造合同预付款
  • 制造业领用材料规章制度的好处
  • 监理费该谁出
  • 公司给员工发工资用途怎么写
  • 本年利润每个月都要结转吗
  • 应收款的周转天数
  • 腾讯电脑管家帮忙卸载
  • 为什么路由器经常断网
  • 预计负债账务处理会计分录
  • 知乎如何更改名字
  • 盘盈盘亏固定资产
  • 带息应收票据的核算
  • php提供了________和___________两种复合数据类型
  • 汇算清缴补充公告
  • html用户注册界面
  • webpack性能优化 加载
  • 二元运算例子
  • 不发工资可以交五险一金吗
  • 应纳所得税额等于利润总额减去差异
  • 分公司增值税可以放总公司一起缴纳吗
  • 国税退税要多久能到账
  • 管理成本分摊比例是多少
  • 企业申请进出口权经营范围
  • 营业外支出的内容包括
  • 企业所得税申报错误怎么更改
  • 主营业务成本大于主营业务收入怎么办
  • 金融放贷工作具体做什么
  • 房地产企业所得税管理办法
  • 差额征税的账务处理教学视频
  • 购销合同印花税按70%
  • 为取得借款发生的手续费
  • 冲减以前年度营业外收入分录
  • 农产品进项税额会计分录
  • 汽车折旧计算方法2023折旧率
  • mysql varchar2
  • sql 关系数据库
  • sql的all和any
  • safari macos
  • win8.1iso
  • 怎么检测软件有没有毒
  • win7电脑dns错误不能上网怎么办
  • win7如何变快
  • javascript继承原理
  • jquery实现图片懒加载
  • json解析 java
  • dos命令中运行文件的命令
  • 到了这个年纪吉他谱完整版
  • linux如何批量执行脚本
  • python迭代器生成器
  • 用python编写的程序称为
  • 宁波国税局领导名单
  • 辽宁省电子税务局电话
  • 征管法第六十三条的内容
  • 支付宝登录电子社保卡显示已被其他账号登录
  • 无锡市社保局电话是多少
  • 航天金税怎么导入发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设