Python queue队列

队列是一种先进先出的数据结构,与之对应的是堆栈这种后进先出的结构。但是在python中,它内置了一个queue模块,它不但提供普通的队列,还提供一些特殊的队列。具体如下:

  • queue.Queue :先进先出队列
  • queue.LifoQueue :后进先出队列
  • queue.PriorityQueue :优先级队列
  • queue.deque :双向队列

Queue:先进先出队列
这是最常用也是最普遍的队列,先看一个例子。

import queue
q = queue.Queue(maxsize)
q.put(11)
q.put(22)
q.put(33)
 
print(q.get())
print(q.get())
print(q.get())

Queue类的参数和方法:
maxsize 队列的最大元素个数,当队列内的元素达到这个值时,后来的元素默认会阻塞,等待队列腾出位置。

def __init__(self, maxsize=0):
self.maxsize = maxsize
self._init(maxsize)

qsize() 获取当前队列中元素的个数,也就是队列的大小
empty() 判断当前队列是否为空,返回True或者False
full() 判断当前队列是否已满,返回True或者False

put(self, block=True, timeout=None)
往队列里放一个元素,默认是阻塞和无时间限制的。如果,block设置为False,则不阻塞,这时,如果队列是满的,放不进去,就会弹出异常。如果timeout设置为n秒,则会等待这个秒数后才put,如果put不进去则弹出异常。

get(self, block=True, timeout=None)
从队列里获取一个元素。参数和put是一样的意思。
join() 阻塞进程,直到所有任务完成,需要配合另一个方法task_done。

def join(self):
 with self.all_tasks_done:
  while self.unfinished_tasks:
   self.all_tasks_done.wait()

task_done() 表示某个任务完成。每一条get语句后需要一条task_done。

import queue
q = queue.Queue(5)
q.put(11)
q.put(22)
print(q.get())
q.task_done()
print(q.get())
q.task_done()
q.join()

LifoQueue:后进先出队列
类似于“堆栈”,后进先出。也较常用。

import queue
q = queue.LifoQueue()
q.put(123)
q.put(456)
print(q.get())

上述代码运行结果是:456

PriorityQueue:优先级队列
带有权重的队列,每个元素都是一个元组,前面的数字表示它的优先级,数字越小优先级越高,同样的优先级先进先出

q = queue.PriorityQueue()
q.put((1,"alex1"))
q.put((1,"alex2"))
q.put((1,"alex3"))
q.put((3,"alex3"))
print(q.get())

deque:双向队列
Queue和LifoQueue的“综合体”,双向进出。方法较多,使用复杂,慎用!

q = queue.deque()
q.append(123)
q.append(333)
q.appendleft(456)
q.pop()
q.popleft()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值