队列queue知识补充
为什么要有队列?
1.多个线程之间维持一个数据先后的秩序
2.线程模块的队列是线程之间数据安全的
常用方法
import queue q = queue.Queue(5) # 设置队列的长度 q.put(1) print('1 over') q.put(2) print('2 over') q.put(3) print('3 over') q.put(4) print('4 over') q.put(5) print('5 over') print(q.get()) q.put(6) # 队列满了如何还没取,就会阻塞 print('6 over') q.put(7) print('7 over') print(q.get())
q.get() # 在队列为空时会阻塞 q.put() # 在队列满时会阻塞 get_nowait() # 在队列为空的时候也不阻塞,这时候会抛异常queue.Empty put_nowait(1) # 在队列满的时候也不阻塞,这时候会抛异常queue.Full 当线程或进程中用到不够准确 q.qsize() # 当前队列中有多少个值 q.empty() # 当前队列是否为空 q.full() # 当前队列是否为满
import queue # 先进先出的队列 :维护用户的请求顺序 q = queue.Queue(3) try: print(q.get_nowait()) # 在队列为空的时候也不阻塞,这时候会抛异常queue.Empty except queue.Empty: print('队列为空') pass
import queue q = queue.Queue(3) q.put(1) q.put(1) q.put(1) try: q.put_nowait(1) # 在队列满的时候也不阻塞,这时候会抛异常queue.Full except queue.Full: print('队列已满') pass
栈
import queue # 栈先入后出 q = queue.LifoQueue() q.put('a') q.put('b') q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) print(q.get())
优先级队列
按元组的第一个元素的ASCII码来优先取,当第一个元素相同时按第二个元素的ASCII码去
# 优先级队列 q = queue.PriorityQueue() q.put((2, 'abc')) q.put((1, 'bbb')) q.put((1, 'ccc')) q.put((3, 'ccc')) q.put((2, 'ccc')) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get())

浙公网安备 33010602011771号