python队列基本使用
Queue:FIFO 即 first in first out 先进先出
LifoQueue:LIFO 即 last in first out 后进先出
PriorityQueue:优先队列,级别越低,越优先
deque: 双边队列
导入三种队列,包
from queue import Queue,LifoQueue,PriorityQueue
Queue 先进先出队列:
#基本 FIFO 队列 先进先出 FIFO 即 First in First Out, 先进先出
#maxsize 设置队列中,数据上限,小于或等于 0 则不限制,容器中大于这个数则阻塞,直到队列中的数据被消掉
q = Queue(maxsize=0)
#写入队列数据
q.put(0)
q.put(1)
q.put(2)
#输出当前队列所有数据
print(q.queue)
#删除队列数据,并返回该数据
q.get()
#输也所有队列数据
print(q.queue)
# 输出:
# deque([0, 1, 2])
# deque([1, 2])
LifoOueue 后进先出队列:
#LIFO 即 Last in First Out, 后进先出。与栈的类似,使用也很简单,maxsize 用法同上
lq = LifoQueue(maxsize=0)
#队列写入数据
lq.put(0)
lq.put(1)
lq.put(2)
#输出队列所有数据
print(lq.queue)
#删除队尾数据,并返回该数据
lq.get()
#输出队列所有数据
print(lq.queue)
#输出:
# [0, 1, 2]
# [0, 1]
优先队列:
# 存储数据时可设置优先级的队列 # 优先级设置数越小等级越高 pq = PriorityQueue(maxsize=0)#写入队列,设置优先级
pq.put((9,'a'))
pq.put((7,'c'))
pq.put((1,'d'))#输出队例全部数据
print(pq.queue)#取队例数据,可以看到,是按优先级取的。
pq.get()
pq.get()
print(pq.queue)
#输出:
[(9, 'a')]
双边队列:
#双边队列 dq = deque(['a','b'])#增加数据到队尾
dq.append('c')
#增加数据到队左
dq.appendleft('d')#输出队列所有数据
print(dq)
#移除队尾,并返回
print(dq.pop())
#移除队左,并返回
print(dq.popleft())
#输出:
deque(['d', 'a', 'b', 'c'])
c
d
生产消费模型:
#生产消费模型
qq = Queue(maxsize=10)
def product(name):
count = 1
while True:
q.put('步枪 {}'.format(count))
print('{}生产步枪 {} 支'.format(name,count))
count+=1
time.sleep(0.3)
def cousume(name):
while True:
print('{} 装备了 {}'.format(name,q.get()))
time.sleep(0.3)
q.task_done()
#部队线程
p = threading.Thread(target=product,args=('张三',))
k = threading.Thread(target=cousume,args=('李四',))
w = threading.Thread(target=cousume,args=('王五',))
p.start()
k.start()
w.start()