进程间通信的两种实现方式(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一样,没有阻塞,队列满了或者空了直接抛出异常。


最新文章

  1. 安卓TabHost页面
  2. SharePoint 2013开发入门探索(二)- 列表操作
  3. Java学习随笔2:Java复合赋值表达式的小问题
  4. git stash 暂存当前修改
  5. pjsip视频通信开发(上层应用)之数字键盘的制作
  6. mysql 查询重复值命令
  7. AppStore 沙箱环境的测试流程
  8. Cocoapod安装使用和常见问题(转载)
  9. [c#]解决方案:需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。
  10. 一名合格的JAVA程序员需要点亮那些技能树?
  11. python简单线程和协程学习
  12. 数据库中row_number()、rank()、dense_rank() 的区别
  13. .net经典书籍
  14. es2015(es6)基础知识整理(更新中...)
  15. VMware5.5-存储
  16. (原)kenel开机logo的制作
  17. python-requests数据驱动延伸
  18. 【Django】关于ORM的使用
  19. numpy 命令 ravel 等
  20. TeamWork#3,Week5,Scrum Meeting 11.13

热门文章

  1. BootLoader与Linux内核的参数传递【转】
  2. 使用pt-query-digest进行日志分析
  3. codeforces B. 4-point polyline 解题报告
  4. PHP加密方式。 base!base!base!
  5. 两次跳转后session丢失
  6. Java类成员访问控制权限
  7. NFS (网络文件系统)
  8. 【Codeforces 20C】 Dijkstra?
  9. Flask log配置,实现按照日期自动生成日志文件
  10. Android开发中几种有用的的日历控件实现