当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/377773.html

相关文章:

  • React 第十九节 useLayoutEffect 用途使用技巧注意事项详解
  • 使用驱动器光盘需格式化:深度解析与数据恢复全攻略
  • 使用C#生成一张1G大小的空白图片
  • EasyPoi 使用$fe:模板语法生成Word动态行
  • git push origin HEAD:refs/for/分支名
  • C++模板:编译时模拟Duck Typing
  • leetcode3. Longest Substring Without Repeating Characters
  • 获取Hive表备注
  • nodejs入门教程16:nodejs res
  • 基于MATLAB多参数结合火焰识别系统
  • 【系统面试篇】进程和线程类(1)(笔记)——区别、通讯方式、同步、互斥、死锁
  • AI周报(10.27-11.02)
  • 实现短信中带有链接,直接打开微信小程序
  • Xamarin 实现播放视频 MP4
  • 你竟然还不了解 LDAP?
  • 【运维类】服务器日常维护清单及检查表,运维巡查,设备巡检,服务器检查(Word原件)
  • leetcode hot100【LeetCode 139. 单词拆分】java实现
  • NLP segment-01-聊一聊分词 AI 的基础
  • flutter 写个简单的界面
  • H5页面在线预览pdf
  • ceph补充介绍
  • [论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation
  • 编写dockerfile生成镜像,并且构建容器运行
  • Javascript数据结构与算法——栈与队列
  • 自然语言处理领域中的两个主要技术挑战:实体歧义和上下文管理
  • 网络模型——二层转发原理