队列QUEUE介绍+类型示例(先进先出、后进先出、优先级高先出、双端进入、生产者+消费者线程)

队列介绍

  1. 队列:队列(Queue)是一种先进先出(FIFO, First In First Out)的线性数据结构。你可以把它想象成排队买票:先来的人先买到,后来的人排在队尾;当多个线程交换信息时队列中尤其有用;---一个容器。
  2. 队列作用:提升效率和程序解耦;
  3. 队列分类:
    • 先进先出对列(FIFO),如queue.Queue();
    • 后进先出:如queue.LifoQueue();
    • 双端队列(Deque):两端都可以入队和出队。既可以当队列用,也可以当栈用。如collections.deque;
    • 优先队列(Priority Queue):出对顺序按照优先级,如queue.PriorityQueue();
    • 消息队列(Message Queue): RabbitMQ、Kafka、ActiveMQ,用于系统通信。
    • 阻塞队列(Blocking Queue):当队列为空时,出队操作会阻塞,直到有元素。当队列满时,入队操作会阻塞,直到有空位,如queue.Queue 就是阻塞队列,常用于生产者-消费者模型;

队列使用(测试使用参数化)

  1. 先入先出队列使用:
python 复制代码
import  queue

q=queue.Queue()
q.put("d")  #存数据
q.put("f")
# q.get(block=False)  #阻塞,报queue.Empty
# q.get(timeout=1)  #超时,报queue.Empty异常
while True:
    if q.empty():  # if q.qsize()==0:
        print("队列中没有数据了")
        break
    else:
        print(q.get())  #取数据
        print(q.qsize())  #队列大小,取一个减少一个
  1. 优先级队列的使用:按优先级高的先取。
python 复制代码
import queue

qp=queue.PriorityQueue()
qp.put((-1,"lily"))  #存数据时设置优先级
qp.put((-2,"wenwen"))
qp.put((1,"baoqiang"))
qp.put((11,"wangcai"))

while True:
    if qp.qsize()==0:
        print("数据为空了")
        break
    else:
        print(qp.get())

测试结果:

  1. 后入先出队列的使用:如买水果后进入的新鲜水果先卖出去。
  1. 双端对列:进入(左和右)appendleft和append。出:popleft和pop。
  1. 消费者模型:分为生产数据的线程端和消费数据的线程端。两个线程一个管生产一个管消费。具体见代码
python 复制代码
import threading,time
import queue
q=queue.Queue(maxsize=10)
def Producer(name): #生产者端
    count=1
    while True:
        q.put("苹果%s"%count)
        print("%s进货了苹果数量%s"%(name,count))
        count +=1
        time.sleep(0.5)

def Customer(name):  #消费者端
    while True:
        print("[%s]拿到了[%s],吃了他----"%(name,q.get()))
        time.sleep(0.6)
        if  q.qsize() == 0:
            print("苹果吃完了")
            break
#线程
p=threading.Thread(target=Producer,args=("王林",))
c1=threading.Thread(target=Customer,args=("消费者大林",))
c2=threading.Thread(target=Customer,args=("消费者大橙子",))
#启动
p.start()
c1.start()
c2.start()

测试结果:

相关推荐
这是程序猿1 小时前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
Web3&Basketball1 小时前
ChatGPT 路由自证:跨客户端实测对照
python·大模型·agent·推理·推理优化
Patrick在香港1 小时前
Claude 工作提醒自动化:香港天文台四个接口三个「更新时间」,警告到期了却还在生效
python·api·claude·数据抓取·香港
用户8356290780511 小时前
Python 实现 Word 文档域的插入与管理
后端·python
quantdash_cc1 小时前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
程序员杰哥1 小时前
UI自动化测试:Jenkins配置
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例
hhzz2 小时前
【OpenCV 入门到精通 07】滤波、阈值与形态学:图像去噪与形状处理
人工智能·python·opencv·计算机视觉
步行cgn2 小时前
Spring 注入 Properties 详解
java·python·spring
shirsl2 小时前
算法 Day3-队列 / deque + 链表
数据结构·python·算法·链表