一、queue

在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题。recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程序占用,而使用多线程加 队列queue,我们就可以把消息发送到queue,而不用管对方怎么处理是否处理,同样对于服务端。
- 消息队列queue在多线程编程中是一个非常好用的模块。

1.1 几种不同的queue

先进先出:q1 = queue.Queue(maxsize= 0) # first in first out

先进后出: q2 = queue.FifoQueue(maxsize= 0) # last in first out

优先级队列: q3 = queue.PriorityQueue(maxsize= 0) #放入元组数据,第一个参数越小优先级越高

  • 队列的几种常用方法
  1. q.put(item, block= True, timeout= 0) #第一个参数为数据,第二个为是否阻塞,如队列满了,就阻塞住程序,不让放进去, 第三超时时间

  2. q.get(block= True, timeout= 0) #同理put, 队列为空阻塞,如果block为False就不阻塞。

  3. q.qsize() 查看当前队列长度,如当q.qsize()>0 时,你就去q.get()

  4. q.empty() 如果当前队列为空则返回True,也可用来检查队列中是否有任务等场景

  5. q.full() 同上队列满了返回True

>>> import queue
>>> q= queue.Queue(10)
>>> q.put(1)
>>> q.put(2)
>>> q.qsize()
2
>>> q.empty()
False
>>> q.full()
False
>>> q.get(block=False)
1
>>> q.get(block=False)
2
>>> q.get(block=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\python35\lib\queue.py", line 161, in get
raise Empty
queue.Empty

消息队列实现生产者消费者模型

最新文章

  1. HTML 认识
  2. 【leetcode❤python】198. House Robber
  3. POJ C程序设计进阶 编程题#3 : 排队游戏
  4. 【递归】数字三角形 简单dp
  5. drawBitmapMesh方法关键参数的说明
  6. 如何查看数据文件或者Log文件是否增长过?
  7. 基础知识(2)- Java程序设计环境
  8. Spring整合JMS(二)——三种消息监听器
  9. c++学习路线连接
  10. AutoCloseable的用法
  11. z2-xcode使用
  12. 第2章 Java基本语法(上): 变量与运算符
  13. Pycharm: 代码跳转如何回退 (小技巧)
  14. mysql中left join设置条件在on与where时的区别
  15. SSH 无法启动的原因分析及解决方法
  16. Codeforces Round #406 (Div. 2)滚粗记
  17. 【神仙题】【CF28D】 Don&#39;t fear, DravDe is kind
  18. Mysql技术内幕笔记
  19. PCA (主成分分析)详解——转载 古剑寒
  20. html5 知识总结

热门文章

  1. 4.6Python数据处理篇之Matplotlib系列(六)---plt.hist()与plt.hist2d()直方图
  2. 英语初级学习系列-00-Hello-打招呼
  3. git 使用及常用命令介绍
  4. 超简单的gif图制作工具
  5. linux下的文件目录结构
  6. gear gym 思维题
  7. mongoDB python 操作
  8. Druid、BoneCP、DBCP、C3P0等主流数据库对比
  9. [HEOI2016/TJOI2016]求和
  10. P1451 求细胞数量(广搜)