Queue模块是Python内置的标准模块,模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序,分别由3个类进行表示:
Queue(FifoQueue) : First in first out
LifoQueue : Last in first out
PriorityQueue : 优先队列
先进先出队列:queue.Queue(maxsize= 0)
maxsize 是个整数,用于设置可以放入队列中的项目数的上限。当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。如果 maxsize 小于等于零,队列尺寸为无限大。
ps: 由于设置que的maxsize为3 ,而循环入列0-3 ,导致3入列的时候,在que.put(i)这里阻塞,而程序无法往下执行

ps:设置了是否阻塞,与最长阻塞时间,超出时间队列还是没有空闲位置,则报Full 异常

后进先出队列 queue.LifoQueue(maxsize = 0)

queue.PriorityQueue(maxsize = 0)
优先级队列,按优先级顺序取出元素,级别低的先取出
队列中的元素一般采取元组的形式进行存储(priority_number,data)

列表也是可以的:

集合set不太行,集合内是无序的,有时候虽然不报错,但是顺序有误

权重(优先级)相等时,如果数据部分可以比较大小,如列表,字符串,数字等,则按数据部分大小顺序从小到大取值;
如果数据部分无法比较大小,如字典, 则报错

如果想实现字典这类的比较或者改变其他数据类型的比较大小方式
需要自己实现一个类,将数据包装到类中,在类中自定义或
重写def __lt__(self, other):魔法方法,其作用是实现同类对象进行“比较”的方法,在类进行比较的时候可以自动调用

1. Queue.qsize() 返回队列当前的大致大小

2.Queue.empty()
队列中是否还有元素,是否为空,为空返回True,否则返回False
3.Queue.full()
队列是否已满, 满 Ture 否 False
4.Queue.put(item, block=True, timeout=None)
将 item 放入队列。
如果可选参数 block 是 true 并且 timeout 是 None (默认),则在必要时阻塞至有空闲插槽可用。如果 timeout 是个正数,将最多阻塞 timeout 秒,如果在这段时间没有可用的空闲插槽,将引发 Full 异常。
反之 (block 是 false),如果空闲插槽立即可用,则把 item 放入队列,否则引发 Full 异常 ( 在这种情况下,timeout 将被忽略)。
5.Queue.put_nowait(item)
入队,不等待,相当于 put(item, block=False)。
6.Queue.get(block=Tuer, timeout=None)
从队列中移除并返回一个项目。
如果可选参数 block 是 true 并且 timeout 是 None (默认值),则在必要时阻塞至项目可得到。如果 timeout 是个正数,将最多阻塞 timeout 秒,如果在这段时间内项目不能得到,将引发 Empty 异常。
反之 (block 是 false) , 如果一个项目立即可得到,则返回一个项目,否则引发 Empty 异常 (这种情况下,timeout 将被忽略)。
7.Queue.get_nowait()
出队列,不等待,相当于 get(block=False) 。
8.Queue.task_done()
在完成一项工作以后,task_done()告诉队列,该任务已处理完成
9.Queue.join()
阻塞至队列中所有的元素都被接收和处理完毕。
队列添加(put)新工作时,未完成任务的计数就会增一,当调用task_done()函数后,就代表执行完一个工作,未完成任务的计数就会减一,当计数为0时 join() 阻塞被解除。
1.线性队列 先进先出

2.控制 广度优先遍历

3.阻塞和线程安全 生产者消费者模式(Producer-Consumer model)


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。