python3 queue模块

在之前的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函数可以根据自己的需求去写。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。