队列
1,解耦,使程序实现松耦合(一个模块修改不会影响其他模块)
2,提高效率
队列中数据只有一份,取出来就没有了,区别于列表,列表数据取出来只是复制了一份,队列取出来相当于剪贴一份
FIFO(先入先出)
默认即为先入先出
import queue# 先入先出(默认)q = queue.Queue()q.put(1)q.put(2)q.put(3)print(q.get())print(q.get())print(q.get())>>123
LIFO(先入后出)
定义方法 queue.LifoQueue()
q = queue.LifoQueue()q.put(1)q.put(2)q.put(3)print(q.get())print(q.get())print(q.get())>>321
PriorityQueue(数据可设置优先级)
定义方法 queue.PriorityQueue()同优先级按照ASCII排序
q = queue.PriorityQueue()# 本次写入元素为元组q.put((2,'2'))q.put((1,'1'))q.put((3,'3'))q.put((1,'a'))print(q.get())print(q.get())print(q.get())print(q.get())>>(1, '1')(1, 'a')(2, '2')(3, '3')
参数
- Queue参数maxsize是实例化 Queue 类时的一个参数,默认为 0即队列容量无限
假设把maxsize参数设置为3则当队列已经有3个元素再put元素则会陷入阻塞状态
- put参数
Queue.put(block=True, timeout=None) block用于设置是否阻塞,默认为True即阻塞,timeout用于设置阻塞等待时长即如果等待时长到了则退出阻塞抛出full错误
import queue# block=False设置不阻塞,当队列满了再插入数据则抛出queue.Full错误q = queue.Queue(maxsize=3)q.put(1, block=False)q.put(2, block=False)q.put(3, block=False)q.put(4, block=False)

- Queue.get(block=True, timeout=None)
阻塞:当队列空了之后,get 就会阻塞,一直等待队列中有数据后再获取数据
不阻塞:当队列空了之后,如果设置 get 不阻塞,或者等待时长到了之后会报错:_queue.Empty
import queueq = queue.Queue()q.put(1)print(q.get())print(q.get(block=False))

- Queue.empty()/Queue.full() 用于判断队列是否为空、满,尽量使用 qsize 代替
