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()) # 输出:2
print(fifo_queue.empty()) # 输出:False
# 添加一个新元素
fifo_queue.put(4)
print(fifo_queue.get()) # 输出:3
print(fifo_queue.get()) # 输出:4
print(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中队列的特性也就说明了使用场景,多线程编程,我就写到这,有不足地方,欢迎大家补充,我来更新!
创作不易,喜欢的话点点关注 点点赞,再次_感谢!