进程间通信的两种实现方式(IPC)

IPC: iter processing communicate

进程间通信:IPC(iter process communicate)
linux free-m 可以查看共享内存
借助于共享的物质来实现通信
借助硬盘:效率太低
通信应该借助内存:1 内存空间 2 处理好锁 1 PIPE:管道
2 Queue:队列 是PIPE + LOCK 实现 ——》占的内存空间
from multiprocessing import Queue
先进先出:先put进去的先get到
只往队列里放数据量较小的消息(比如文件的地址),不应该放大数据
q = Queue(3)
q.put()
q.get()
1 Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递
2 maxsize是队列中允许最大项数,省略则无大小限制。
3.q.get方法可以从队列读取并且删除一个元素
from multiprocessing import Queue

q=Queue(3) #先进先出
#注意:
#1、队列占用的是内存空间
#2、不应该往队列中放大数据,应该只存放数据量较小的消息
# 掌握的
q.put('first')
q.put({'k':'sencond'})
q.put(['third',])
# print(q.get()) q.put(4) # q.put() 因为队列满了 放不进去,所以一直在等待着,程序不往下运行,卡住
# 解决方法:注释掉 或者在上面get一次,释放掉里卖弄一个数据把4添加进去就可以。
print(q.get())
print(q.get())
print(q.get())
# print(q.get())

put、 get 基本用法

q=Queue(3) #先进先出
q.put('first',block=True,timeout=3)
q.put({'k':'sencond'},block=True,timeout=3)
q.put(['third',],block=True,timeout=3)
print('===>')
q.put(4,block=True,timeout=3) print(q.get(block=True,timeout=3))
print(q.get(block=True,timeout=3))
print(q.get(block=True,timeout=3))
print(q.get(block=True,timeout=3))

get、put内部block和timeout属性

如果向队列里面添加值,队列里值满的话,延迟后直接报full的异常。如果不指定延迟,程序会停住,一直等待。

如果从队列里取值,队列里值空的话,延迟后会直接报empty的异常。如果不指定延迟,程序会停住,一直等待。

队列满了再put值直接抛出异常,不阻塞

队列空了再get值直接抛出异常,不阻塞

q=Queue(3) #先进先出
q.put('first',block=False,)
q.put({'k':'sencond'},block=False,)
q.put(['third',],block=False,)
print('===>')
# q.put(4,block=False,) # 队列满了直接抛出异常,不会阻塞 print(q.get(block=False))
print(q.get(block=False))
print(q.get(block=False))
print('get over')
# print(q.get(block=False)) # 队列空了直接抛出异常,不会阻塞。

block = False

put_nowait 和get_nowait

q=Queue(3) #先进先出

q.put_nowait('first') #q.put('first',block=False,)
q.put_nowait(2)
q.put_nowait(3)
# q.put_nowait(4) print(q.get_nowait())
print(q.get_nowait())
print(q.get_nowait())
# print(q.get_nowait())

put_nowait、get_nowait

总结一下:默认情况下,block为True,队列满了会进入阻塞状态,一直等待,直到队列值由空位。队列空了也会一直等待,不会抛出异常。

block为True,outtime设定为3s,那么阻塞时间只有3s,3s后会抛出异常。block为False时,不用指定时间,只要队列满了或者空了都会直接抛出异常。

put_nowait 和get_nowait和block = False一样,没有阻塞,队列满了或者空了直接抛出异常。


进程间通信的两种实现方式(IPC)的更多相关文章

  1. Android四大组件之服务的两种启动方式详解

    Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...

  2. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  3. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  4. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  5. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

  6. Redis两种持久化方式(RDB&AOF)

    爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...

  7. struts2+spring的两种整合方式

    也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...

  8. easyui datagride 两种查询方式

    easyui datagride 两种查询方式function doReseach() { //$('#tt').datagrid('load', { // FixedCompany: $('.c_s ...

  9. 【Visual Lisp】两种出错处理方式

    两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理. ;;============================================================= ...

随机推荐

  1. UICollectionView基础用法

    初始化部分: UICollectionViewFlowLayout *flowLayout= [[UICollectionViewFlowLayout alloc]init]; self.myColl ...

  2. react native 知识点总结(一)

    一.关于react native 版本的升级 参照文档:http://reactnative.cn/docs/0.45/upgrading.html react-native -v   查看当前版本 ...

  3. 一步一步学Silverlight 2系列(23):Silverlight与HTML混合之无窗口模式

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. 第六届蓝桥杯C++B组省赛

    1.奖券数目 2.星系炸弹 3.三羊献瑞 4.格子中输出 5.九数组分数 6.加法变乘法 7.牌型种数 8.移动距离 9.垒骰子 10.生命之树 1.奖券数目 奖券数目有些人很迷信数字,比如带“4”的 ...

  5. 「LuoguP4779」 【模板】单源最短路径(标准版)

    Description 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60: Ag→Cu: 最终,他 ...

  6. 「网络流24题」「LuoguP4016」 负载平衡问题

    Description GGG 公司有 nnn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nnn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. ...

  7. Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

    错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器 ...

  8. 杂项-公司:Aspose

    ylbtech-杂项-公司:Aspose Aspose 于2002年3月在澳大利亚悉尼创建,旗下产品覆盖文档.图表.PDF.条码.OCR.CAD.HTML.电子邮件等各个文档管理领域,为全球.NET ...

  9. iconMoon---小图标小记

    IcoMoon 是一个免费的图标库.可以下载自己需要的图标 三.使用流程.操作演示 进入主页,点击下图所示区域开始: 每个图标你都是可以自己进行标记的(移上去会看到Edit, 点击之),然后—— 注: ...

  10. ibatis 中 $与#的区别

    ibatis 中 $与#的区别 使用#: select * from table where id = #id# 如果字段为整型:#id#表示成id select * from table where ...