Queue
#1 环境
代码语言:javascript复制Python3.7.3
#2 开始
代码语言:javascript复制from queue import Queue,LifoQueue,PriorityQueue
#2.1 队列种类
- FIFO(先进先出)
q = Queue(maxsize=0)
- LIFO(后进先出)
q = LifoQueue(maxsize=0)
- priority(优先队列)
q = PriorityQueue(maxsize=0)
# 后面详细说
maxsize : maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。
#2.2 操作
- 入队
put(item, block=True, timeout=None)
# item: 入队的数据(任何数据类型都可以)
# block: bool型,默认True
# timeout: 超时时间,默认None
# 1.当block为默认值时,如果队列已经处于"满队"状态,还要继续往队列插入数据,这时timeout的值就是程序抛异常的时间(timeout=None时,程序永远处于"堵塞"状态,除非有数据"出队")
# 2.当block=False时,不论timeout是什么,只要队列"堵塞"就马上抛异常
- 出队
get(block=True, timeout=None)
# block: bool型,默认True
# timeout: 超时时间,默认None
# 1.当block为默认值时(True),如果队列已经处于"空"状态,还要继续"出队",这时timeout的值就是程序抛异常的时间(timeout=None时,程序永远处于"空转"状态(无限循环),除非有数据"入队")
# 2.当block=False时,不论timeout是什么,只要队列"空转"就马上抛异常
- 获取队列大小
q.qsize()
- 获取队列是否为空
# 如果队列为空,返回True,反之False
q.empty()
- 判断队列是否"满队"
# 如果队列满了,返回True,反之False
q.full()
- 清空队列
q.queue.clear()
#2.3 优先队列 (PriorityQueue)
代码语言:javascript复制from queue import PriorityQueue
q = PriorityQueue()
class Job(object):
def __init__(self, priority, description):
self.priority = priority
self.description = description
print('入队:', description)
return
def __lt__(self, other):
return self.priority < other.priority
# 数字越小,优先级越高
q.put(Job(1,"aaa"))
q.put(Job(2,"bbb"))
q.put(Job(8,"ccc"))
q.put(Job(3,"ddd"))
print(q.get().description)
print(q.get().description)
print(q.get().description)
print(q.get().description)