一、定义
消息队列是为了分配任务,避免大量的并发请求过多过快的消耗服务器资源,从而优化产品的性能,这样的话,多线程或者多进程,又或者协程等等都是可以达到优化的目的
二、类型
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() #返回当前队列中的所有任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通