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

  • 10种免费的网店推广方式(有没有免费的网店)

    10种免费的网店推广方式(有没有免费的网店)

  • ipad8用一代笔还是二代笔(ipad8 2020用一代笔还是二代笔)

    ipad8用一代笔还是二代笔(ipad8 2020用一代笔还是二代笔)

  • 苹果维修id在哪查(苹果手机维修id在哪里)

    苹果维修id在哪查(苹果手机维修id在哪里)

  • 关机键是什么字母(关机键长什么样子)

    关机键是什么字母(关机键长什么样子)

  • iphonexr背部容易发热(iphonexr背面摔碎怎么办)

    iphonexr背部容易发热(iphonexr背面摔碎怎么办)

  • 抖音没有同款道具怎么办(抖音没有同款道具按钮)

    抖音没有同款道具怎么办(抖音没有同款道具按钮)

  • 手机充电忘记拔了会有事吗(手机充电忘记拔了充了一晚上)

    手机充电忘记拔了会有事吗(手机充电忘记拔了充了一晚上)

  • 停机保号多久会被注销(停机保号多久会真正停机)

    停机保号多久会被注销(停机保号多久会真正停机)

  • 什么是置顶聊天(什么叫置顶聊天)

    什么是置顶聊天(什么叫置顶聊天)

  • 蓝牙耳机必须带盒子才能用吗(蓝牙耳机必须带两个才能听到吗)

    蓝牙耳机必须带盒子才能用吗(蓝牙耳机必须带两个才能听到吗)

  • 京东会员退货免运费吗(京东会员退货免运费,商家给买家补偿多少)

    京东会员退货免运费吗(京东会员退货免运费,商家给买家补偿多少)

  • 苹果官网退货签收验货要多久(苹果官网退货签收了,订单状态怎么没更新)

    苹果官网退货签收验货要多久(苹果官网退货签收了,订单状态怎么没更新)

  • 手机识别码权限是什么意思(手机识别码权限是什么意思,怎么打开)

    手机识别码权限是什么意思(手机识别码权限是什么意思,怎么打开)

  • opporeno3上市时间(opporeno3上市时间图片)

    opporeno3上市时间(opporeno3上市时间图片)

  • 华为手机换手机怎么把手机所有东西导出(华为手机换手机数据转移)

    华为手机换手机怎么把手机所有东西导出(华为手机换手机数据转移)

  • 正确的ip地址格式范围(正确的ip地址格式怎么判断)

    正确的ip地址格式范围(正确的ip地址格式怎么判断)

  • 华为p30触屏不灵敏怎么办(华为p30触屏没反应)

    华为p30触屏不灵敏怎么办(华为p30触屏没反应)

  • qq打电话微信会忙线吗(qq打电话微信会显示什么)

    qq打电话微信会忙线吗(qq打电话微信会显示什么)

  • ps怎么拉长身高(ps拉长身高的快捷键)

    ps怎么拉长身高(ps拉长身高的快捷键)

  • 淘宝设置提醒怎么取消掉(淘宝设置提醒后的东西在哪)

    淘宝设置提醒怎么取消掉(淘宝设置提醒后的东西在哪)

  • 小米桌面内容中心怎么关闭(小米桌面内容中心怎么删除)

    小米桌面内容中心怎么关闭(小米桌面内容中心怎么删除)

  • 安和桥在哪(安和桥哪一年火的)

    安和桥在哪(安和桥哪一年火的)

  • 三星s10充电快吗(三星s10+充电速度怎么样)

    三星s10充电快吗(三星s10+充电速度怎么样)

  • 闲鱼为什么被封(闲鱼为什么经常封账号)

    闲鱼为什么被封(闲鱼为什么经常封账号)

  • 苹果id电话号码怎么换(苹果id电话号码可以换吗)

    苹果id电话号码怎么换(苹果id电话号码可以换吗)

  • apple pencil和普通电容笔区别(普通的pencil和apple pencil)

    apple pencil和普通电容笔区别(普通的pencil和apple pencil)

  • vceal00什么型号(vce-al00什么型号)

    vceal00什么型号(vce-al00什么型号)

  • 山东税务网上申报平台操作员查询
  • 附加税的内容有哪些
  • 进出口税则是什么意思
  • 自行申报需补缴税款时征收滞纳金吗
  • 建筑业挂靠企业所得税如何收取
  • 免税增值税的有哪几项
  • 银行回单电子退库是什么意思
  • 本年利润借方专栏有什么
  • 进账多于销项怎样报税
  • 通信协会费入什么科目
  • 残保金申报表中的上年工资总额指所属期的上一年吗
  • 影响无形资产项目金额的有
  • 月末计提账务处理
  • 用友如何取消月末结转
  • 企业领用本企业生产的产品会计分录
  • 仓库的数量为负数怎么办
  • 所得税需要结转嘛
  • 小规模企业所得税优惠政策最新2023
  • 股东未发工资可否提出仲裁
  • 小规模建筑安装增值税税率是多少
  • 劳务所得个税税率表
  • win10回退到以前版本失败
  • 工资薪金所得个人所得税税率表
  • 会计估计变更的会计处理方法
  • 微信转账记录怎么加回好友?
  • ajax+json
  • 鸿蒙系统值得升级嘛
  • 债权转增资本的条件
  • sesvc.exe是什么进程
  • 哪些情形不属于伪现金
  • 企业票据贴现费怎么算
  • passwd -s命令
  • php中strcmp函数
  • 如何用php操作mysql
  • 供电局销售电力产品
  • 人工智能怎么做出来的
  • 离线开票限额怎么办
  • 金税第一次使用怎么用
  • 个体工商户加盟店名字和营业执照不符合
  • 事业单位应当按月对固定资产计提折旧
  • c语言中sizeof是啥意思
  • dedecms官网
  • 员工加班打车费进项可以抵扣吗
  • 怎么作废银联在网上银行
  • 民办非企业单位工会经费
  • 融资租赁的增值税专用发票可不可以抵扣
  • 每季度末是什么意思
  • 接受投资的固定资产按什么入账
  • 普通发票做账需要价税分离吗
  • 土地增值税的预征和清算
  • 应收账款增加给哪一方
  • 税率与征收率是怎么回事
  • 年终奖都有啥
  • 公司购买的商品质量问题能用12315投诉吗
  • 固定资产转让开票大类是什么
  • 一般纳税人可抵扣的票证有哪些?
  • 信用代码证过期了6年怎么办理
  • 年末坏账准备计提余额减少说明什么
  • 企业所得税季度交还要年交吗
  • 会计核算的主要环节
  • Ubuntu下mysql安装和操作图文教程
  • linux中,什么命令可以控制口令的存活时间?
  • centos如何删除用户组里面的用户
  • linux系统ln命令
  • win7取消ch
  • centos8安装锐速
  • Netlib.exe - Netlib是什么进程 有什么用
  • Linux中怎么安装nano已经有安装包了
  • linux关闭sh
  • [置顶]电影名字《收件人不详》
  • opengl绘制图形旋转
  • jquery插件使用教程
  • cocos2dx减少内存开销
  • opengl用法
  • 脚本被删除
  • Node.js中的construct
  • android ios UI
  • python实现识别相似图片小结
  • python3解析json
  • 进项税和销项税怎么抵扣举例说明
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设