队列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()

测试结果:

相关推荐
在世修行4 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885724 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI4 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
信誓旦旦的程序猿5 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫5 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
KeepRobots7 小时前
11-01 温哥华不回拨:用 60 行 Python 查你的工单系统会不会差一小时(KeepRobots 工程笔记)
python
xiao77mwq7 小时前
你以为 OCR 慢?实测 81.3 s 里全是故障代价:如何把「定格态」消掉,让耗时从 6.5 s 到 13 倍差距显出原形
python
深圳市益普科技有限公司7 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法
“AI国潮设计-小江”8 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
砚底藏山河9 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融