进程间通信的两种实现方式(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. tuple built-in function

    tuple tips: 1.对于Python中的tuple类型来说,他与其它的序列类型来讲最大的不同就是tuple是不可变的. 2.当你需要创建一个只有一个元素的tuple时,需要在元祖分隔符里面加一 ...

  2. codeforces 414A A. Mashmokh and Numbers(素数筛)

    题目链接: A. Mashmokh and Numbers time limit per test 1 second memory limit per test 256 megabytes input ...

  3. Android Studio下载安装

    官方下载地址:https://developer.android.google.cn/studio#downloads 因为安卓自带的模拟器会比较慢一些,这里勾选去掉,我们使用夜神模拟器. 这里根据自 ...

  4. bzoj2144

    二分+lca 我们把向中间缩看成向上爬,向两边走看成向下爬,那么就相当于找出两个状态的lca,如果相邻的差是(a,b),a<b,那么向中间走就是(a,b-a)或(b-a,a),这个东西很像更相减 ...

  5. In-App Purchase Programming Guide----(七) ----Restoring Purchased Products

    Restoring Purchased Products Users restore transactions to maintain access to content they’ve alread ...

  6. UVaLive 7456 Least Crucial Node (并查集+暴力 或者 求割点)

    题意:求标号最小的最大割点.(删除该点后,指定点#sink能到达的点数减少最多). 析:由于不知道要去掉哪个结点,又因为只有100个结点,所以我们考虑用一个暴力,把所有的结点都去一次,然后用并查集去判 ...

  7. (水题)Codeforces - 630H - Benches

    https://codeforces.com/problemset/problem/630/H 又一个组合数学的问题,我们先考虑在 $n$ 列中选出 $5$ 列来放椅子,然后对第一列有 $n$ 种放法 ...

  8. Untiy检测各类设备输入

    轴需要单独设置 using UnityEngine; using System.Collections; using UnityEngine.UI; public class OutputKey : ...

  9. bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】

    其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...

  10. poj 3207 Ikki's Story IV - Panda's Trick【2-SAT+tarjan】

    注意到相交的点对一定要一里一外,这样就变成了2-SAT模型 然后我建边的时候石乐志,实际上不需要考虑这个点对的边是正着连还是反着连,因为不管怎么连,能相交的总会相交,所以直接判相交即可 然后tarja ...