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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEEONTIME

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值