Python 队列(Queue)基本操作与多线程并发实战

阿澈
阿澈
发布时间:2026-10-12| 2人浏览过
原创

本文详解 Python 内置 queue.Queue 类的核心接口,包含元素入队出队、非阻塞读写及容量状态检测,并通过多线程脚本展示如何构建稳定的生产者-消费者架构,有效规避并发编程中的资源竞争与阻塞卡顿问题。

Queue 队列的基础操作与状态判断

Python 标准库中的 queue.Queue 是线程安全的先进先出(FIFO)数据结构。创建时可指定 maxsize 限制最大容量;若传入 0 或负数,则视为无上限存储(实际受系统可用内存约束)。

from queue import Queue

# 初始化容量为 5 的队列
q = Queue(5)

# 存入不同类型的数据
q.put(123)
q.put('hello world!')
q.put(['hello', 'world'])
q.put(('a', 'b'))
q.put({'key': 'value'})

使用 q.get() 可按存入顺序逐一取出元素:

# 依次取出全部元素
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
依次调用get取出队列元素的终端输出
元素按 FIFO 原则依次被读取并输出

当队列达到设定的容量上限时,默认的 q.put() 会发生阻塞挂起,直到有线程取出元素腾出空间。查看当前元素数量可使用 q.qsize(),同时 q.full() 和 q.empty() 可用于快速判定队列状态:

print(f'初始大小: {q.qsize()}')
for _ in range(5):
    print(f'取出后大小: {q.qsize()}')
    q.get()

print(f'是否已满: {q.full()}')
print(f'是否为空: {q.empty()}')
qsize连续调用递减的输出结果
每执行一次 get 操作,队列长度随之一一递减

第1步:启用非阻塞读写模式

目的:避免在任务紧急时因队列满载或清空导致的程序挂起。
入口与动作:将 q.put() 替换为 q.put_nowait(data),将 q.get() 替换为 q.get_nowait()。
参数与状态:当无法立即满足插入或读取条件时,该方法不会等待,而是直接抛出 Full 或 Empty 异常。开发者需在 try-except 块中捕获该异常并编写降级或重试逻辑。

多线程环境下的生产者-消费者模型

在数据采集、日志轮转等场景中,通常需要异步协作处理数据流。queue.Queue 内部自带锁机制,天然支持多线程安全通信。通过固定容量的队列串联两个线程,可实现生产端与消费端的解耦与速率匹配,防止内存爆表或 CPU 空转。

from queue import Queue
import threading
import time

# 生产者:定时向队列写入数据
def producer(q):
    num = 0
    while True:
        q.put(num)
        num += 1
        print(f'[生产者] 放入: {num-1}')
        time.sleep(1)

# 消费者:持续从队列提取并处理数据
def consumer(q):
    while True:
        data = q.get()
        print(f'[消费者] 取出并处理: {data}')

if __name__ == '__main__':
    q = Queue(maxsize=4)  # 设置缓冲池上限
    t_producer = threading.Thread(target=producer, args=(q,), daemon=True)
    t_consumer = threading.Thread(target=consumer, args=(q,), daemon=True)

    t_producer.start()
    t_consumer.start()
双线程交替输出数据的控制台截图
生产者每秒插入数值,消费者实时接收,验证异步流水线运作效果

启动上述脚本后,终端将交替打印双方日志。由于设置了 maxsize=4,当缓冲区满时生产者的 put() 会自动阻塞,从而反压控制前端采集频率;待消费者处理完毕后自动释放空间恢复运行。此模式广泛用于爬虫中间件、消息队列代理及后台批处理任务。

以上就是 Python 队列基本操作与多线程应用的详细内容,更多关于 Python 并发编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。