一、定义
消息队列是为了分配任务,避免大量的并发请求过多过快的消耗服务器资源,从而优化产品的性能,这样的话,多线程或者多进程,又或者协程等等都是可以达到优化的目的
二、类型
1、Queue:先进先出,后进后出
from queue import Queue() #1、实例化Queue对象 q = Queue() #2、存放数据 q.put(1) q.put(2) #3、取出数据 q.get() #1 q.get() #2 #如果存放两条数据,使用get方法取第三条数据,程序会阻塞 #q.get() #没有数据是报错 #q.get_nowait()
2、LifoQueue:先进后出,后进先出(栈的特点)
from queue import LifoQueue #1。实例化对象并指定队列长度 lq = LifoQueue(3) lq.put(1) lq.put(2) lq.put(3) lq.get() #3 lq.get() #2 lq.get() #1
3、PriorityQueue:按照优先级顺序进行排序(默认从小到大)
from queue import PriorityQueue #1、实例化对象 pq = PriorityQueue() #2、存放数据 pq.put(1) pq.put(9) pq.put(7) #取出数据 pq.get() #1 pq.get() #7 pq.get() #9
三、常用方法
put() #存放数据,如果超出队列长度,会阻塞 get() #取出数据,如果超出数据(没有数据),会阻塞 put_nowait() #存放数据,如果超出队列长度,会直接报错,不会阻塞 get_nowait()#取出数据,如果超出队列长度,会直接报错,不会阻塞 task_done() #结合join使用,如果用了join方法,必须要写task_done,用来通知join当前事件已完成,不写会发生阻塞 join() #直到queue队列中的所有事件都处理完毕,队列为空以后再执行join()之后的代码,如果用了join(),那就一定要写task_done() qsize() #返回队列大小 q.empty() #判断队列是否为空,如果为空返回True,反之返回False q.full() #判断队列数据是否存满,如果存满返回True,反之返回False queue() #返回当前队列中的所有任务
标签:pq,join,get,队列,消息,lq,put From: https://www.cnblogs.com/songyunjie/p/16848828.html