当前位置: 首页 > java >正文

Python基础(①⑧Queue)

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

queue.Queue:用于多线程间的安全通信(线程安全)
collections.deque:更轻量的队列实现,适合单线程场景

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

deque(双端队列)是 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 是专门为多线程设计的,自带锁机制,确保多个线程同时操作时不会出现数据混乱(线程安全)

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) == 0empty()判断队列是否为空
等待所有任务完成join()多线程中等待所有任务处理
标记任务完成task_done()配合 join() 使用

123

http://www.xdnf.cn/news/20366.html

相关文章:

  • 机床夹具设计 +选型
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • `objdump`与`addr2line`工具详解
  • 新服务器初始化:Git全局配置与SSH密钥生成
  • 【Canvas与图标】古铜色“HTML”图标
  • eclipse 安装 lombok
  • 【基础-单选】下列哪一项不属于ArkUI组件的公共事件?
  • JVM调优总结
  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制
  • 微服务的编程测评系统22-项目部署结束
  • 基于Echarts+HTML5可视化数据大屏展示-图书馆大屏看板
  • 软考 系统架构设计师系列知识点之杂项集萃(142)
  • JVM中如何调优新生代和老生代?
  • 基于LSTM深度学习的网络流量测量算法matlab仿真
  • C++ 内存模型:用生活中的例子理解并发编程
  • linux C 语言开发 (三) 建立云服务器
  • C++ 小游戏:拍桌子
  • Nmap网络扫描工具详细使用教程
  • 算法学习路径
  • 基于 Gemini 的 CI/CD 自动化测评 API 集成实战教程
  • Browser Use:打造你的浏览器自动化助手
  • Python数据可视化科技图表绘制系列教程(六)
  • 【Python自动化】 21 Pandas Excel 操作完整指南
  • 小杰机器学习(two)——导数、损失函数、斜率极值最值、微分规则、切平面与偏导数、梯度。
  • Rust 登堂 之 Deref 解引用(十)
  • 一文掌握工业缺陷检测项目实战(Pytorch算法训练、部署、C++ DLL制作、Qt集成)
  • 微信小程序(uniapp)实现连接蓝牙
  • cuda-NCCL笔记(1)-- 初步了解使用NCCL
  • Python 多线程与多进程入门指南
  • Windows 设备音频录制 | WASAPI 音频数据采集 / 环回录制