在之前的python版本中,对于queue模块的引用都是
import Queue
当我在python3 版本中同样这样导入,会返回
ModuleNotFoundError: No module named 'Queue'
意识到改版了的问题,嘴上轻生mmp,默默打开了官方文档,在这记录一下简单的用法。
首先,按照惯例,先来个简介
功能
queue模块用于在多个线程之间交换信息
三种模式
FIFO:先进先出,实力化方式:
fq = queue.Queue(maxsize)
maxsize:队列的大小,如果小于或者等于0,就是一个无限大的队列,本文中所有的maxsize都一个意思
LIFO:后进先出
lq = queue.LifoQueue(maxsize)
Priority queue:优先级队列,默认按照元素大小进行排序,最小的最先输出。
pq = queue.PriorityQueue(maxsize)
共有的常用方程
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False,
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当于Queue.get(block = False),非阻塞方法 Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item)相当于Queue.put(block = False),非阻塞方法
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
Queue.join() 实际上意味着等到队列为空,再执行别的操作
简介完毕,下面 上代码!
import queue
#初始化一个大小为3的fifo队列
fq = queue.Queue(3)
#用这个来看看基础的常用方程
#判断队列是否为空,
print(fq.empty()) #这个位置的都是输出结果 True
#添加一个元素
fq.put(13,block = True,timeout = 3) #无返回值
#判断是否满了
print(fq.full()) #False
print(fq.qsize()) # 1
#再添加一个元素
fq.put_nowait(23)
#取回元素
print(fq.get_nowait()) #13
print(fq.get()). #23. 由此可以看出,这个是一个先进先出的队列
#后进先出
lq = queue.LifoQueue()
for i in range(5):
lq.put(i)
while not lq.empty():
print(lq.get(),end=' ')
#4 3 2 1 0
#优先级队列
pq = queue.PriorityQueue()
pq.put(20)
pq.put(25)
pq.put(1)
while not pq.empty():
print(pq.get(),end=' ')
#1 20 25
Note:优先级队列有很大的灵活性,它的sort函数可以根据自己的需求去写。