脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python 工具类之Queue组件详解用法

python 工具类之Queue组件详解用法

2022-02-19 14:04剑客阿良_ALiang Python

队列(queue)是一种先进先出的(First In First Out)的线性表,简称FIFO。队列允许在一端进行插入操作,而在另一端进行删除操作。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作

简述

队列一直都是工程化开发中经常使用的数据类型,本篇文章主要介绍一下python queue的使用,会边调试代码,边说明方法内容。

 

环境

python: 3.6.13

 

单向队列

初始化单向队列

python 工具类之Queue组件详解用法

放置一些数据

python 工具类之Queue组件详解用法

可以使用full()方法判断队列是否已经塞满数据,可以通过qsize()方法查看队列内元素数量。

python 工具类之Queue组件详解用法

这时候我们从队列取出数据,看先取到的是什么。

python 工具类之Queue组件详解用法

现在队列里面只有两个数,我们再塞入3个数看一下。

python 工具类之Queue组件详解用法

这个时候我们继续塞入第六个数会怎么样呢?

python 工具类之Queue组件详解用法

可以看到如果塞入超过队列限定数量的元素,会阻塞住队列。所以在一般的项目工程中,我们会分成两个线程,一个消费数据,一个塞入队列数据。按照业务需求看是否需要限定队列长度。

 

先进后出队列

上面展示的是先进先出(FIFO)的单项队列,python的queue模块也提供先进后出(LIFO)的队列: LifoQueue,类似java的栈类型。

python 工具类之Queue组件详解用法

塞入数据后看取出的是在队列的什么位置。

python 工具类之Queue组件详解用法

可以看出从队列取出的是队尾数据。

 

优先级队列

按照自定的优先级来对队列数据自动排序:PriorityQueue。

python 工具类之Queue组件详解用法

塞入数据后,全部取出,打印看一下顺序是什么样的。

python 工具类之Queue组件详解用法

可以看出,书序是按照我们塞入数据的级别由小到大排序的。

 

双向队列

双向队列,顾名思义就是可以从队列两端进行处理:deque。

初始化,并塞入3个数据。

python 工具类之Queue组件详解用法

从左侧,也就是最前端塞入一个元素。看下效果。

python 工具类之Queue组件详解用法

可以自定义塞入元素的位置。

python 工具类之Queue组件详解用法

取出队尾的数据。

python 工具类之Queue组件详解用法

取出队首元素。

python 工具类之Queue组件详解用法

 

完整代码

import queue

# 单向队列
q = queue.Queue(5)
print(q.maxsize)
q.put(1)
q.put(2)
q.put(3)
print(q.full())
print(q.qsize())

print(q.get())
q.put(4)
q.put(5)
q.put(6)
q.put(7)
print(q.full())
print(q.qsize())
print(q.get())

# 先进后出队列
q = queue.LifoQueue(5)
q.put(1)
q.put(2)
q.put(3)
print(q.get())

# 优先级队列
q = queue.PriorityQueue(5)
q.put((5, "电"))
q.put((2, "雨"))
q.put((4, "雷"))
q.put((1, "风"))
while True:
  print(q.get())

# 双向队列
q = queue.deque()
q.append(1)
q.append(2)
q.append(3)

q.appendleft(4)
q.insert(2, 5)

print(q.pop())
print(q.popleft())

 

总结

在很多工程化架构中,队列数据类型是必不可少的。活学活用吧。哎,今年ti10,中国队又无缘冠军,明年加油吧。

如果本文对你有帮助,请点个赞支持一下吧。

python 工具类之Queue组件详解用法

到此这篇关于python 工具类之Queue组件详解用法的文章就介绍到这了,更多相关python Queue组件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://huyi-aliang.blog.csdn.net/article/details/120827420

延伸 · 阅读

精彩推荐