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

  • 小米浏览器怎么设置电脑版(小米浏览器怎么卸载)

    小米浏览器怎么设置电脑版(小米浏览器怎么卸载)

  • 一根网线如何接两个摄像头(一根网线如何接两台电视)

    一根网线如何接两个摄像头(一根网线如何接两台电视)

  • intelturboboost超频要关闭吗(英特尔bios超频)

    intelturboboost超频要关闭吗(英特尔bios超频)

  • 打印机长边翻页和短边翻页的区别(打印机长边翻页怎么放纸)

    打印机长边翻页和短边翻页的区别(打印机长边翻页怎么放纸)

  • word中的手动换行符是通过什么产生的(word中的手动换页符)

    word中的手动换行符是通过什么产生的(word中的手动换页符)

  • 三星exynos980相当于骁龙多少(三星esynos980相当于)

    三星exynos980相当于骁龙多少(三星esynos980相当于)

  • 华为nova7se截屏怎么弄(华为nova7se截屏长图)

    华为nova7se截屏怎么弄(华为nova7se截屏长图)

  • 工程模式是什么意思(工程模式有几种)

    工程模式是什么意思(工程模式有几种)

  • 手机lte是什么功能(手机上面lte)

    手机lte是什么功能(手机上面lte)

  • 为什么交了话费手机还是没网络(为什么交了话费宽带还是不能用)

    为什么交了话费手机还是没网络(为什么交了话费宽带还是不能用)

  • 扫一扫黑屏是什么原因(扫一扫黑屏怎么办)

    扫一扫黑屏是什么原因(扫一扫黑屏怎么办)

  • 韩剧tv不能装在电视吗(韩剧tvapp怎么下载不了)

    韩剧tv不能装在电视吗(韩剧tvapp怎么下载不了)

  • 手机爱奇艺怎么给别人手机使用(手机爱奇艺怎么下载电影)

    手机爱奇艺怎么给别人手机使用(手机爱奇艺怎么下载电影)

  • iphone7基带坏的特征(iphone7基带坏了还能用wifi吗)

    iphone7基带坏的特征(iphone7基带坏了还能用wifi吗)

  • wps怎么把文字变成表格(wps怎么把文字变成图片)

    wps怎么把文字变成表格(wps怎么把文字变成图片)

  • 手机qq黄钻怎么设置隐身访问(手机qq黄钻怎么取消自动续费)

    手机qq黄钻怎么设置隐身访问(手机qq黄钻怎么取消自动续费)

  • 微信怎么关闭小额免密(微信怎么关闭小程序功能)

    微信怎么关闭小额免密(微信怎么关闭小程序功能)

  • 怎么关掉windows安全中心(怎么关掉windows许可证即将过期的提示)

    怎么关掉windows安全中心(怎么关掉windows许可证即将过期的提示)

  • ios13如何截图(ios13.5怎么截图)

    ios13如何截图(ios13.5怎么截图)

  • 微信已过期的文件怎么恢复(微信已过期的文档怎么找)

    微信已过期的文件怎么恢复(微信已过期的文档怎么找)

  • 物联卡可以装手机上吗(物联卡可以装手机上)

    物联卡可以装手机上吗(物联卡可以装手机上)

  • 华为免打扰模式在哪(华为免打扰模式对方打电话提示什么)

    华为免打扰模式在哪(华为免打扰模式对方打电话提示什么)

  • 苹果的wps文档保存在哪里(苹果的wps文档保存不了)

    苹果的wps文档保存在哪里(苹果的wps文档保存不了)

  • 沙棘需要多少能量(沙棘一次喝多少升好)

    沙棘需要多少能量(沙棘一次喝多少升好)

  • 探探和陌陌有什么区别(探探和陌陌什么关系)

    探探和陌陌有什么区别(探探和陌陌什么关系)

  • iphone下载的视频在哪里(iPhone下载的视频相册不显示)

    iphone下载的视频在哪里(iPhone下载的视频相册不显示)

  • 怎样重新设置qq相恋日(怎样重新设置苹果手机id与密码)

    怎样重新设置qq相恋日(怎样重新设置苹果手机id与密码)

  • arw格式怎么转成jpg(arw格式图片如何转化为jpg)

    arw格式怎么转成jpg(arw格式图片如何转化为jpg)

  • iphonex出声孔清理(苹果x的声音孔怎么清理)

    iphonex出声孔清理(苹果x的声音孔怎么清理)

  • 微信添加我的方式全部关闭(微信添加我的方式都关了怎么还能加我)

    微信添加我的方式全部关闭(微信添加我的方式都关了怎么还能加我)

  • 微信小程序 | 基于ChatGPT实现电影推荐小程序(微信小程序基于什么框架)

    微信小程序 | 基于ChatGPT实现电影推荐小程序(微信小程序基于什么框架)

  • 税务人员岗位有哪些
  • 小规模纳税人增值税减免账务处理
  • 销售收入与营业费用的配比
  • 企业卖车需要交印花税吗
  • 滴滴能出票吗
  • 结转完工入库产品成本计算
  • 企业所得税不超过300万怎么算
  • 残疾人保障金的计算方法
  • 纳税人性质怎么改
  • 对公账户取现金有限制吗
  • 公司亏损股东退股还要贴钱
  • 集团公司及子公司员工安排工作
  • 资源税征税范围有哪些
  • 自然人独资企业交哪些税
  • 研发支出费用化支出包括哪些
  • 公司收到法院的欠款起诉书,应该怎么办
  • 投资性房地产的处置账务处理
  • 注销时公司账上没有钱付股东投资款
  • 股权的溢价是什么意思
  • 会计差旅费属于什么会计科目
  • 税收缴款书税务收现专用的用途
  • 企业所得税一般是多少
  • 三方扣款fd6
  • 增值税纳税义务人
  • 红字专用发票信息表需要盖章吗
  • 弥补以前年度亏损从哪里取数
  • 收到退回留抵退款的短信
  • 公司没有进出口权 如何进行业务
  • 小规模自开专票税率是1%还是3%
  • 员工给公司代垫的款项分录
  • 按键盘不起作用怎么办
  • win11本地用户和组
  • Mac Chrome打开HTTPS证书错误问题解决方法
  • word要打印保存在哪个类型
  • 招待审计人员
  • 预收账款什么时候开发票
  • 最早的拍照手机是哪一年
  • PHP:imagedestroy()的用法_GD库图像处理函数
  • 应税行为包括销售货物吗
  • uniapph5微信支付
  • java web项目部署
  • 智能优化算法主要内容
  • 收到待报解预算收入怎么做分录
  • 未确认融资费用报表填在哪个科目
  • 当月交印花税会计分录
  • 财务报表季报应付职工薪酬是指三个月工资累计还是
  • phpcms v9网页禁止复制
  • 党建工作经费使用流程
  • 销售部门发生的商品维修费
  • 个体工商户具体工作内容怎么写
  • 企业将重组债务转为资本的会计处理
  • 私车公用费用报销是否违规
  • 普通发票做账需要价税分离吗
  • 法院拍卖土地原欠税怎么办
  • 发给客户的红包是什么费用
  • 支付原材料款项会计科目
  • 出口退税备案完事了,为什么还没有退税勾选那个模块
  • 所有者权益的来源包括
  • 财务报表的一般构成要素
  • 递延收益影响当期所得税吗为什么
  • 电子记账app下载
  • 诺诺开票人怎么修改
  • 工业企业固定资产投资
  • phpmyadmin配置文件
  • winds密码忘记了
  • ubuntu16.04开启远程桌面
  • xp系统如何设置用户密码
  • dll进程
  • 电脑开机后显示xp界面后一直是黑屏状态
  • winio在win7下使用
  • win7升级到win10专业版教程
  • android游戏开发用什么语言
  • Web2.0下XHTML+CSS 设计需要注意的地方小结
  • 网络游戏数据包
  • python3遍历
  • python线程启动和暂停
  • javascript要怎么学
  • 安卓手机管家推荐
  • 换电脑了税控盘怎么办
  • 湖南地税网上办税服务厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设