Python基础(①⑧Queue)

Python 标准库提供了两种常用的队列工具:

queue.Queue:用于多线程间的安全通信(线程安全)

collections.deque:更轻量的队列实现,适合单线程场景

1. 单线程场景:用 collections.deque 实现队列

deque(双端队列)是 Python 内置的高效队列实现,支持从两端快速添加 / 删除元素

python 复制代码
from collections import deque

# 创建一个空队列
q = deque()

# 入队(添加元素到末尾)
q.append("第一个元素")
q.append("第二个元素")
q.append("第三个元素")
print("队列内容:", list(q))  # 输出: ['第一个元素', '第二个元素', '第三个元素']

# 出队(移除并返回头部元素)
first = q.popleft()
print("出队元素:", first)  # 输出: 第一个元素
print("出队后队列:", list(q))  # 输出: ['第二个元素', '第三个元素']

# 查看队列长度
print("队列长度:", len(q))  # 输出: 2

# 检查队列是否为空
print("是否为空:", len(q) == 0)  # 输出: False

2. 多线程场景:用 queue.Queue 实现队列

queue.Queue 是专门为多线程设计的,自带锁机制,确保多个线程同时操作时不会出现数据混乱(线程安全)

python 复制代码
from queue import Queue
import threading
import time

# 创建队列(可指定最大长度,超出则阻塞)
q = Queue(maxsize=3)  # 最多容纳3个元素

# 定义生产者线程:往队列中添加元素
def producer():
    for i in range(5):
        item = f"任务{i}"
        q.put(item)  # 入队,如果队列满则阻塞等待
        print(f"生产了: {item},当前队列大小: {q.qsize()}")
        time.sleep(0.5)  # 模拟耗时

# 定义消费者线程:从队列中取元素
def consumer():
    for i in range(5):
        item = q.get()  # 出队,如果队列为空则阻塞等待
        print(f"消费了: {item},当前队列大小: {q.qsize()}")
        q.task_done()  # 通知队列该任务已处理完成
        time.sleep(1)  # 模拟处理耗时

# 启动线程
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
t1.start()
t2.start()

# 等待所有任务处理完成
q.join()  # 阻塞直到队列中所有元素都被处理并调用了task_done()
print("所有任务处理完毕")
操作 deque(单线程) Queue(多线程) 说明
入队 append(item) put(item) 添加元素到队列末尾
出队 popleft() get() 移除并返回头部元素
查看长度 len(q) qsize() 获取当前元素数量
检查是否为空 len(q) == 0 empty() 判断队列是否为空
等待所有任务完成 join() 多线程中等待所有任务处理
标记任务完成 task_done() 配合 join() 使用

123

相关推荐
岁月宁静39 分钟前
RAG 文档摄入全链路,从原理到生产落地
vue.js·人工智能·python
caimouse42 分钟前
Reactos 第 8 章 结构化异常处理 — 8.2 系统空间的结构化异常处理
windows
JaydenAI1 小时前
[对比学习LangChain和MAF-07]如何引入人机交互的审批流程
python·ai·langchain·c#·agent·hitl·maf
caimouse1 小时前
Reactos 第 7 章 视窗报文 — 7.3 Win32k 的用户空间回调机制
windows
caimouse1 小时前
Reactos 第 9 章 设备驱动 — 9.5 一组PnP设备驱动模块的实例
网络·windows
神成12 小时前
vmware 上 win7 系统按照 vmware tool
windows
神奇元创2 小时前
商用级光路加速卡:大模型推理的极速落地方案
python·神经网络·fpga开发·dsp开发
运筹vivo@2 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
大白菜和MySQL2 小时前
java应用排查高线程
java·python