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

相关推荐
kyrie_sakura5 分钟前
python学习笔记11 -- 进程和线程
笔记·python·学习
Jialu.26 分钟前
中文 NLP 模型部署实战:FastAPI 接口 + Streamlit 看板
人工智能·python·自然语言处理·fastapi
还是大剑师兰特2 小时前
Maven‑3.9.16 Windows 下载+安装+环境变量完整教程
java·windows·maven
Asum1ta2 小时前
K8s 学习环境搭建:Python 与 PyCharm 开发环境配置指南
python·学习·kubernetes
知识汲取者2 小时前
FastAPI 学习教程(写给想学 FastAPI 的 Java 工程师的)
python·学习·fastapi
飞Link2 小时前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
小鹿的周先生2 小时前
第四章-SpringAI-函数调用&ToolCalling
开发语言·人工智能·python
️学习的小王2 小时前
Windows Claude Code 接入 Playwright‑MCP,调用本机Edge浏览器(避坑完整教程)
前端·windows·edge
方知我3 小时前
NumPy一小时速成
开发语言·python·numpy
IPdodo_3 小时前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试