• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
菩提叶子
博客园    首页    新随笔    联系   管理    订阅  订阅
消息队列

一、定义

消息队列是为了分配任务,避免大量的并发请求过多过快的消耗服务器资源,从而优化产品的性能,这样的话,多线程或者多进程,又或者协程等等都是可以达到优化的目的

二、类型

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() #返回当前队列中的所有任务

 

posted on 2022-11-01 19:03  菩提叶子  阅读(42)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3