队列Queue
3种Queue类型
-
FIFO:class Queue.Queue(maxsize=0)
FIFO 即 First in First Out,Queue 提供了一个基本的 FIFO 容器,使用方法很简单,maxsize 是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。
-
LIFO:class Queue.LifoQueue(maxsize=0)
即 Last in First Out,后进先出。与栈的类似,maxsize 用法同上。
-
优先级队列
class Queue.LifoQueue(maxsize=0)
构造一个优先队列。maxsize 用法同上。
常用方法
q = queue.Queue(maxsize=10)
- q.qsize() 返回队列的大小
- q.empty() 如果队列为空,返回True,反之False
- q.full() 如果队列满了,返回True,反之False
- q.get([block[, timeout]]) 获取队列,timeout等待时间
- q.get_nowait() 相当Queue.get(False)
- q.put(item) 写入队列,timeout等待时间
- q.put_nowait(item) 相当Queue.put(item, False)
- q.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
- q.join() 实际上意味着等到队列为空,再执行别的操作
get和put
q.get() 是从队列里拿数据,q.put() 是往队列添加数据
import queue
# 设置上限maxsize=10
q = queue.Queue(maxsize=10)
# 往队列加10个数据
for i in range(100):
if q.qsize() >= 10:
# 存放的数据达到上限maxsize,插入会导致阻塞
break
else:
q.put(i)
# 从队列取值
while not q.empty():
n = q.get()
print(n)
"""
输出如下:
0
1
2
3
4
5
6
7
8
9
"""