欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > python数据类型-8-数据结构-Queue (队列)

python数据类型-8-数据结构-Queue (队列)

2025/5/11 1:50:23 来源:https://blog.csdn.net/Lookontime/article/details/143375377  浏览:    关键词:python数据类型-8-数据结构-Queue (队列)

python数据类型-8-数据结构-Queue (队列)

一.说明

在python数据类型系列文章中已经介绍了 python的各种数据类型,队列(Queue)是一种非常重要的数据结构,但并不是python的数据类型,队列遵循先进先出(FIFO)的原则,即先插入的元素先被移除,主要的用途是为了支持线程安全和高效的队列操作而设计的!

二.set(集合)

1.定义

1.队列是一种特殊的线性数据结构;

2.其中元素的插入和删除操作仅能在队列的两端进行;

3.通常用于管理任务、缓冲数据以及实现并发编程。

2.特性

1.先进先出(FIFO):最先添加到队列的元素最先被移除;

2.线程安全queue 模块中的队列是线程安全的,可以在多线程环境中安全使用;

3.支持多种类型queue 模块提供了多种类型的队列,如 FIFO 队列、优先队列和后进先出(LIFO)队列;

3.创建FIFO 队列
import queue# 创建一个 FIFO 队列
fifo_queue = queue.Queue()# 创建一个 LIFO 队列
lifo_queue = queue.LifoQueue()# 创建一个优先队列
priority_queue = queue.PriorityQueue()
4.常用操作和方法

put(item, block=True, timeout=None):将元素 item 放入队列。如果 block 为 True,且队列已满,则阻塞直到有空位;如果 timeout 设置,超时后将引发异常。

get(block=True, timeout=None):从队列中取出并返回一个元素。如果队列为空,且 block 为 True,则阻塞直到有元素可取;如果设置了 timeout,超时后将引发异常。

qsize():返回队列中元素的数量。

empty():如果队列为空,返回 True;否则返回 False

full():如果队列已满,返回 True;否则返回 False

1.FIFO 队列操作
import queue# 创建一个 FIFO 队列
fifo_queue = queue.Queue(maxsize=3)  # 最大长度为 3# 添加元素
fifo_queue.put(1)
fifo_queue.put(2)
fifo_queue.put(3)print(fifo_queue.qsize())  # 输出:3# 取出元素
print(fifo_queue.get())  # 输出:1
print(fifo_queue.get())  # 输出:2print(fifo_queue.empty())  # 输出:False# 添加一个新元素
fifo_queue.put(4)
print(fifo_queue.get())  # 输出:3
print(fifo_queue.get())  # 输出:4print(fifo_queue.empty())  # 输出:True
2.LIFO 队列(LifoQueue)

LifoQueue 的用法与 Queue 类似,但遵循后进先出的原则。

import queue# 创建一个 LIFO 队列
lifo_queue = queue.LifoQueue()# 添加元素
lifo_queue.put(1)
lifo_queue.put(2)
lifo_queue.put(3)# 取出元素
print(lifo_queue.get())  # 输出:3
print(lifo_queue.get())  # 输出:2
3.优先队列(PriorityQueue)

优先队列根据优先级(小的值优先)来处理元素。

import queue# 创建一个优先队列
priority_queue = queue.PriorityQueue()# 添加元素,元素是元组 (优先级, 值)
priority_queue.put((2, 'task2'))
priority_queue.put((1, 'task1'))
priority_queue.put((3, 'task3'))# 取出元素
print(priority_queue.get())  # 输出:(1, 'task1')
print(priority_queue.get())  # 输出: (2, 'task2')
5.使用场景

任务管理:在多线程应用中,任务可以放入队列,工作线程从队列中取出任务执行。

数据缓冲:用于处理数据流,比如读写文件时的缓冲区。

消息传递:在不同线程之间传递消息或数据。

三.总结

python中队列的特性也就说明了使用场景,多线程编程,我就写到这,有不足地方,欢迎大家补充,我来更新!

创作不易,喜欢的话点点关注 点点赞,再次_感谢!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词