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

  • 华为nova9pro怎么录屏(华为nova9pro怎么隐藏应用)

    华为nova9pro怎么录屏(华为nova9pro怎么隐藏应用)

  • excel表格密码保护怎么设置(Excel表格密码保护如何破解)

    excel表格密码保护怎么设置(Excel表格密码保护如何破解)

  • 屏幕息屏后显示时间怎么设置(屏幕息屏后显示不出来)

    屏幕息屏后显示时间怎么设置(屏幕息屏后显示不出来)

  • vivo手机底部三个按键怎么设置(vivo手机底部三个按键失灵了)

    vivo手机底部三个按键怎么设置(vivo手机底部三个按键失灵了)

  • 显示未接通什么情况

    显示未接通什么情况

  • 苹果怎么录视频有声音(苹果怎么录视频把声音录进去)

    苹果怎么录视频有声音(苹果怎么录视频把声音录进去)

  • core2duo是什么处理器(core是干嘛的)

    core2duo是什么处理器(core是干嘛的)

  • 618是淘宝的活动还是天猫的(618是淘宝的活动时间吗)

    618是淘宝的活动还是天猫的(618是淘宝的活动时间吗)

  • 华为p40pro怎么返回上一页(华为p40pro怎么返回桌面)

    华为p40pro怎么返回上一页(华为p40pro怎么返回桌面)

  • 小米mix2有没有红外线遥控功能(小米MIX2有没有无线充电)

    小米mix2有没有红外线遥控功能(小米MIX2有没有无线充电)

  • 华为手机视频删掉能找回吗(华为手机视频删不掉)

    华为手机视频删掉能找回吗(华为手机视频删不掉)

  • 公众号一个月能发几次(公众号一个月能挣多少钱)

    公众号一个月能发几次(公众号一个月能挣多少钱)

  • 100m宽带需要全千兆吗(宽带办100m够用吗)

    100m宽带需要全千兆吗(宽带办100m够用吗)

  • led灯珠配电源公式(led灯珠供电)

    led灯珠配电源公式(led灯珠供电)

  • 滴滴账号注销后可重新申请吗(滴滴账号注销后车辆也一起注销了吗)

    滴滴账号注销后可重新申请吗(滴滴账号注销后车辆也一起注销了吗)

  • 苹果减弱效果开还是关(苹果减速)

    苹果减弱效果开还是关(苹果减速)

  • oppoa5可以用5g吗(oppoa5支持电信4g吗)

    oppoa5可以用5g吗(oppoa5支持电信4g吗)

  • 数据压缩的种类及特点(数据压缩分为哪两类)

    数据压缩的种类及特点(数据压缩分为哪两类)

  • 苹果11信号有改善吗(苹果11信号改5g)

    苹果11信号有改善吗(苹果11信号改5g)

  • 手机没卡可以上微信吗(手机没卡可以上抖音吗)

    手机没卡可以上微信吗(手机没卡可以上抖音吗)

  • 拼多多连续包月卡怎么取消(拼多多连续包月怎么取消自动续费)

    拼多多连续包月卡怎么取消(拼多多连续包月怎么取消自动续费)

  • 拼多多拼单啥意思(拼多多 拼单 什么意思)

    拼多多拼单啥意思(拼多多 拼单 什么意思)

  • iphone7耳机坏了能修吗(苹果7耳机断了接线图)

    iphone7耳机坏了能修吗(苹果7耳机断了接线图)

  • Oppo reno的RAM容量多大(opporeno4手机容量)

    Oppo reno的RAM容量多大(opporeno4手机容量)

  • 苹果手机主屏幕不显示时间了怎么办(苹果手机主屏幕的圆圈怎么设置)

    苹果手机主屏幕不显示时间了怎么办(苹果手机主屏幕的圆圈怎么设置)

  • wps循环引用如何关(wps循环引用警告一个或多个公式包含循环引用)

    wps循环引用如何关(wps循环引用警告一个或多个公式包含循环引用)

  • 快手瘦脸功能在哪里(快手的瘦脸功能在哪里能找到)

    快手瘦脸功能在哪里(快手的瘦脸功能在哪里能找到)

  • 笔记本开机黑屏的解决方法(笔记本开机黑屏不显示任何东西)

    笔记本开机黑屏的解决方法(笔记本开机黑屏不显示任何东西)

  • KB4487020更新内容有哪些(kb4586853更新)

    KB4487020更新内容有哪些(kb4586853更新)

  • 增值税发票网上勾选平台
  • 电子普通发票和纸质普通发票一样吗
  • 个人所得税抵扣项目有哪些及金额
  • 豆制品属于农产品初加工吗
  • 已收保证金
  • 公司交房租没有开票能记账?
  • 一次性就业补助金的领取条件
  • 互联网公司如何盈利
  • 资本成本与财务风险的区别
  • 职工取暖费可以一次性发放吗
  • 长期借款借方登记归还的本金和利息
  • 公司注销房产如何转给个人
  • 分公司增值税如何缴纳增值税
  • 油票需要填纳税信息吗
  • 一般纳税人施工费税率是多少
  • 财务费用负数是什么意思
  • 小规模减半征收印花税的政策
  • 酒店购买矿泉水再卖给客人怎么处理
  • 管理费用和财务费用在资产负债表怎么填
  • 公司0申报怎么做账
  • mac上如何切换apple id
  • 如何预防计算机病毒的方法
  • 留存收益在哪里可以查到
  • php模块
  • 公司成立后多久可以开发票
  • 偷渡系统可以正常接收到升级吗
  • 进程program
  • 滞纳金不得超过税款
  • 外资企业出租房产税优惠
  • php linux常用命令
  • php_fpm
  • php判断useragent
  • 销售货物的收入总额包括什么
  • bootstrap easyui结合
  • 汇兑损益计入什么科目
  • convert convert
  • 政府补助的会计准则
  • 减免税在借方如何结转
  • 摊位出租税率
  • 日常收集整理常用工具
  • 百旺 税控盘
  • sql2005备份数据库
  • 换出长期股权投资的会计处理
  • 文化建设税减免政策
  • 补缴税款计入什么科目
  • 提取折旧的意义
  • 增值税一般纳税人登记表在哪里找
  • 保理融资的费用由谁承担
  • 制造费用是借还是贷
  • 建筑企业案例
  • redhat6.5安装图形界面
  • windows Server 2003设置磁盘配额操作图解
  • 迁移windows
  • 如何安装ubuntu20.04
  • linux数字运算
  • win10没有显示
  • xp 控制面板
  • linux 下MySQL服务器的启动与停止
  • Win10 Mobile 10586.36预览版怎么更新?
  • win8的系统
  • 如何改进个人工作作风
  • linux备份的文件bak如何恢复
  • win7 64位旗舰版系统联网时提示0x80070002的解决方法
  • 深度缓冲
  • webgl基础教程
  • python内置函数什么用来返回序列中的最大元素
  • js实现计数
  • jquery全选和全不选效果
  • lua脚本语言零基础教程
  • unity 案例
  • JavaScript函数中,哪个语句可以返回值
  • [置顶]bilinovel
  • jquery遍历json对象
  • js实现省份和市级联动
  • 公司地址变更后社保要改吗
  • 怎么查公司税务等级
  • 车船税可以异地补办吗
  • 企业登录密码是几位数
  • 欠款抵押房产可以直接过户吗
  • 登录电子税务局的方式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设