进程间通信的两种实现方式(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. ios 短音效的使用

    1.通用短音效ID的获取 #import <Foundation/Foundation.h> @interface MJAudioTool : NSObject /** * 播放音效 * ...

  2. Mysql语句示例

    Mysql语句示例 最常用 sql 语句总结 前言 Mysql 是数据库开发使用的主要平台之一.sql 的学习掌握与使用是数据库开发的基础,此处展示详细sql 语句的写法,及各种功能下的 sql 语句 ...

  3. nginx最简单的网站配置:单主机+静态文件

    1.域名绑定主机:新建一个A记录,将www的子域名绑定到主机的ip上:2.主机的nginx设置监听端口,绑定域名,修改网站根目录路径和默认首选文件:/etc/nginx/conf.d 这个目录中新建一 ...

  4. 使用 Word 2013 维护博客

    博客的发布.修改是一件非常耗时.耗精力的事情.借助 Word 2013,维护博客将变得非常简单. 1 新建博客文章 运行 Word 2013,新建文档.如下图所示: 图1 鼠标左键单击上图的" ...

  5. 机器学习 Hidden Markov Models 2

    Hidden Markov Models 下面我们给出Hidden Markov Models(HMM)的定义,一个HMM包含以下几个要素: ∏=(πi)表示初始状态的向量.A={aij}状态转换矩阵 ...

  6. Android Studio四大组件之Service

    Service在Android运行在后台,它没有可视化界面,只是默默运行在后台.我们以一个后台定时器的例子清晰的说明Service的运行流程. 一.创建Service类 项目右键->New-&g ...

  7. ng 表单提交验证

    http://www.runoob.com/try/try.php?filename=try_ng_validate

  8. 初识NDA

    领导要签署保密协议,全是英文,叫我来翻译一下,这样便接触到了NDA,翻译过程中遇到不少问题,既然接触到了,还是多查查资料了解一下,以备以后的不时之需. NDA 全称 Non Disclosure Ag ...

  9. Codechef QGRID

    QGRID code 给定一个 n × m(1 <= m <= 3) 的点网格,网格的边上以及点上都有权值.初始时所有点的权值都为 0 .维护两种操作:1. x1 y1 x2 y2 c 把 ...

  10. Android控件大全(四)——CoordinatorLayout

    CoordinatorLayout 其实就是个高级的FrameLayout,用于协调子布局要使用该控件,需要再gradle中加入: compile 'com.android.support:desig ...