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

相关推荐
Robot侠36 分钟前
极简LLM入门指南4
大数据·python·llm·prompt·提示工程
等....2 小时前
Miniconda使用
开发语言·python
Java&Develop2 小时前
Aes加密 GCM java
java·开发语言·python
爱笑的眼睛113 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
Rose sait4 小时前
【环境配置】Linux配置虚拟环境pytorch
linux·人工智能·python
过期动态4 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
一世琉璃白_Y5 小时前
pg配置国内数据源安装
linux·python·postgresql·centos
秋田君5 小时前
前端工程化部署入门:Windows + Nginx 实现多项目独立托管与跨域解决方案
前端·windows·nginx
liwulin05065 小时前
【PYTHON】COCO数据集中的物品ID
开发语言·python