队列

本文详细介绍了Python中的queue模块,包括FIFO队列(Queue)、LIFO队列(LifoQueue)和优先队列(PriorityQueue)的使用方法。探讨了队列的创建、元素的入队与出队操作,以及阻塞与非阻塞模式下的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

queue模块–队列

from queue import Queue,LifoQueue,PriorityQueue#三种队列

Queue

Queue是先进先出(first-in first-out)队列。

Queue(maxsize=0)

  • 创建FIFO队列,返回Queue对象
  • maxsize <= 0时,队列长度没有限制

Queue.get(block=True, timeout=None)

  • 从队列中移除元素并返回这个元素
  • block为阻塞,timeout为超时
  • 如果block为True,是阻塞,timeout为None就是一直阻塞
  • 如果block为True,但是timeout有值,就阻塞到一定秒数抛出Empty异常
  • block为False,是非阻塞,timeout将被忽略,要么成功返回一个元素,要么抛出Empty异常

Queue.get_nowait()

  • 等价于get(block=False)
  • 但是queue的这种阻塞效果,需要多线程来演示

Queue.put(item, block=True, timeout=None)

  • 把一个元素加入到队列中去
  • block=True,timeout=None,一直阻塞直至有空位放元素
  • block=True,timeout=5,阻塞5秒就抛出Full异常(满了)
  • block=False,timeout失效,立即返回,能塞进去就塞,不能则返回抛出Full异常。

Queue.put_nowait(item)

  • 等价于put(item,block=False)
from queue import Queue

q = Queue(2)#设置队列大小为2
q.put('a')
q.put('c')
#q.put('c',block=True,timeout=3)#超出队列大小,线程等待3秒后抛出Full异常
print(q.empty(),q.full(),q.qsize(),q.maxsize)
q.get()
q.get()
print(q.empty(),q.full(),q.qsize(),q.maxsize)
#q.get(block=True,timeout=3)#如果从空队列里弹出,线程等待3秒后抛出Empty异常
#控制台输出
#False True 2 2
#True False 0 2

LifoQueue

后进先出队列,这个类继承自Queue,使用方式同Queue。

PriorityQueue

优先队列,这个类也继承自Queue类,并重写了入队,出对的方法。

  • 它里面是堆,用列表实现的堆,构建的是小顶堆
  • 元素可以存储任意值,但是优先队列内部是直接进行元素大小比较的,不同类型比较可能抛出异常
  • 入队时,将元素加入到列表末尾。然后进行小顶堆调整
  • 出队时,将索引0既堆顶出最小的值和列表最后一个值调换,并弹出末尾值,再重新堆调整

时,将元素加入到列表末尾。然后进行小顶堆调整

  • 出队时,将索引0既堆顶出最小的值和列表最后一个值调换,并弹出末尾值,再重新堆调整
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值