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

相关推荐
测试员周周2 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
vortex52 小时前
PowerShell 的命令补全方案: PSReadLine + PSCompletions + argc + Carapace
windows·powershell
2301_783848652 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
Ujimatsu3 小时前
虚拟机安装Ubuntu 26.04.x服务器版(命令行版)(2026.5)
linux·windows·ubuntu
CLX05053 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
老纪4 小时前
SQL中如何查找特定的空值行:WHERE IS NULL深度解析
jvm·数据库·python
噜噜噜阿鲁~4 小时前
python学习笔记 | 10.0、面向对象编程
笔记·python·学习
weixin199701080164 小时前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
2301_781571424 小时前
mysql数据库响应缓慢如何排查_使用EXPLAIN分析执行计划
jvm·数据库·python
彳亍1015 小时前
实现倒计时数字在到达1后自动隐藏(2为最后可见数字),同时继续运行至-1再终止
jvm·数据库·python