#进程间通讯--Queue
#Process有时需要通信的,操作系统提供了很多机制来实现进程之间的通讯
#而Queue就是其中一个 #1.Queue的使用
#可以使用multiprocessing模块下的Queue实现多进程之间的数据传递,
#Queue本身就是一个消息队列 from multiprocessing import Queue #每个进程都可以和消息队列对话和拿东西(读取信息)
if __name__ == "__main__":
#有三个空间 可以循环使用
#初始化一个Queue对象,最多可以读取三条消息
#一个进程可以放多条消息到Queue中
#-1或者不写 表示消息队列无穷大
q = Queue(3) #放消息
q.put('消息1')
q.put('消息2')
#判断消息队列是否已满
print(q.full())
# q.put('消息3')
print(q.full()) if q.full():#满了 True 未满false
print('消息队列已经满了,不要再放了')
else:
q.put('消息N') # 如果消息队列已经满了,我还接着put,会发生什么?
# 消息4在外面等着 阻塞
#如果已经满了 默认后面是阻塞的
# q.put('消息4')#q.put("消息4",True,None)
try:
q.put('消息4',False)#不阻塞 报错
except:
print('消息队列已满,现在消息数量:%d'%q.qsize())
try:
#阻塞两秒
q.put('消息4',True,2)
except:
print('消息队列已满,现在消息数量:%d'%q.qsize()) # try:
# q.put('消息4', True)#一直等
# except:
# print('消息队列已满,现在消息数量:%d' % q.qsize()) #实战代码
if not q.full():
# q.put('消息内容',False)
q.put_nowait('消息内容')
from multiprocessing import Queue
# 获取消息
q1 = Queue(3)
q1.put('A')
q1.put('B')
q1.put('C') print(q1.get())
print(q1.get())
print(q1.get())
#如果不知道里面有多少消息数量 可以用下面的方法全部拿出消息
# count = q1.qsize()
# if not q1.empty():
# for i in range(count):
# # 队列的特点是:先进先出--first in first out
# # print(q1.get())
# print(q1.get_nowait())
print('over!') """
说明:
1.初始化Queue对象时(例如: q = Queue()),
或者括号中没有指定的最大可接收的消息数量,或数量为负值,
那么就表示可接收消息数量没有上线,(直到内存尽头)
2.常用函数
(1)q.qsize() 返回当前队列包含的消息数量
(2)q.full() 表示当前队列是否已经满了 True -满了 False -未满
(3)q.empty()表示当前队列是否为空,True--空,False--未空 --脾气温和类型的,有耐心的
(4)q.put(消息,block=True,timeout=None)
(5)q.get(block=True,timeout=None)
block(默认True)--阻塞(停在put状态),直接put进去为止
timeout(默认None)--一直等,如果设置timeout,则会等待N秒,然后强制put --脾气暴躁类型,砸场子的.
(6)q.put_nowait()--相当于q.put(消息,False)
(7)q.get_nowait()--相当于q.get(False)
"""

最新文章

  1. C# 调用 Oracle
  2. UICollectionView中使用 UICollectionViewFlowLayout进行布局(模仿苹果相册)
  3. HDU 4768 Flyer(二分)
  4. 不是技术牛人,如何拿到国内IT巨头的Offer(转载)
  5. android中的通信机制总结
  6. [backbone]backbone.js
  7. 《JavaScript权威指南》读书笔记(一)
  8. .NET Framework4.0 下的多线程
  9. SharePoint 2010 设置宽度1024px
  10. 《head first java 》读书笔记(二)
  11. OC 语法基础一
  12. RecyclerView-------之GridView模式加载更多
  13. 深入理解Lambda函数及其用法
  14. js的splice方法
  15. MemCache详细解读
  16. Spring-Cloud-Gateway 从升级到放弃
  17. PHP 快速实现大文件上传
  18. Python 模块 和 包
  19. Windows Server 2012上安装.NET Framework 3.5
  20. sql语句练习题

热门文章

  1. POJ-3468 A Simple Problem with Integers (区间求和,成段加减)
  2. python学习第四十五天__name__用法和作用
  3. Sobel硬件实现的硬件代码分析(三)
  4. HDU_2007
  5. .net easyui Tree树
  6. websocket在springboot+vue中的使用
  7. box-shadow四个边框设置阴影样式
  8. Simple GB28181 System
  9. linux tcp/ip 调优
  10. C# Windows Services 启动和结束其它进程