队列
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())
>>
1
2
3
LIFO(先入后出)
定义方法 queue.LifoQueue()
q = queue.LifoQueue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
>>
3
2
1
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 queue
q = queue.Queue()
q.put(1)
print(q.get())
print(q.get(block=False))
- Queue.empty()/Queue.full() 用于判断队列是否为空、满,尽量使用 qsize 代替