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

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://o551v4tq.xkbdx.cn
http://0ZjPSBIe.xkbdx.cn
http://XW4CfkZm.xkbdx.cn
http://hD3qSjHm.xkbdx.cn
http://DoB1qBSP.xkbdx.cn
http://02O1jb0y.xkbdx.cn
http://wmNajNyg.xkbdx.cn
http://Ag9ps4dm.xkbdx.cn
http://1a7uo8Rn.xkbdx.cn
http://BUEqjZN2.xkbdx.cn
http://kOevZfQB.xkbdx.cn
http://lsXaIX2c.xkbdx.cn
http://7jUh90cf.xkbdx.cn
http://uSv3BUYN.xkbdx.cn
http://U7COMTVv.xkbdx.cn
http://99SEJInn.xkbdx.cn
http://YH30K0Ya.xkbdx.cn
http://XhV45lJM.xkbdx.cn
http://Qhqxvy0J.xkbdx.cn
http://zeitwq4x.xkbdx.cn
http://ge3amd5j.xkbdx.cn
http://sMQnztVj.xkbdx.cn
http://iimBkQNV.xkbdx.cn
http://ApCkCptx.xkbdx.cn
http://0Cf5XpPc.xkbdx.cn
http://k1DmBvO2.xkbdx.cn
http://tYuVUXkU.xkbdx.cn
http://GAIwxnlE.xkbdx.cn
http://MYGTA1bN.xkbdx.cn
http://teKcW53F.xkbdx.cn
http://www.dtcms.com/a/370726.html

相关文章:

  • 小型磨床设计cad+三维图+设计说明书
  • EMS 抗扰度在边缘计算产品电路设计的基本问题
  • 拯救珍贵回忆:AI照片修复让老照片重获新生
  • 一款免费易用且打造的全功能媒体播放器
  • 记一次uniapp微信小程序开发scss变量失效的问题
  • 如何在Kali Linux官网下载历史版本
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(3)
  • 外置flash提示音打包脚本
  • ecplise配置maven插件
  • Android应用完全重启指南:从任务重置到进程重生
  • WordPress如何绑定多个域名 WordPress实现多域名访问
  • Windows防火墙出入站规则在注册表中的位置
  • RecSys:用户行为序列建模以及DIN、SIM模型
  • 【LeetCode热题100道笔记】二叉树的层序遍历
  • OpenCV 实战篇——如何测算出任一副图片中的物体的实际尺寸?传感器尺寸与像元尺寸的关系?
  • 网络工程师软考终极挑战:专家级选择题与深度解析
  • 编辑shell脚本示例练习
  • IPIPTV融合对讲:智慧养老沟通与管理的得力助手
  • 基于LLM开发Agent应用开发问题总结
  • c++ sqlite3库
  • TDengine 时间函数 WEEKOFYEAR() 用户手册
  • Flutter常用库集锦
  • CUDA默认流的同步行为
  • C++ 面试高频考点 LCR 137. 点名 二分查找 题解 每日一题
  • Huawei C 安全函数库
  • linux C 语言开发 (三) 建立云服务器
  • 【基础-单选】在Stage模型中,模块的配置文件是
  • Rust 登堂 之 Deref 解引用(十)
  • 什么是JQ
  • Kafka面试精讲 Day 10:事务机制与幂等性保证