Python数据结构之优先级队列queue用法详解
作者:李元静 发布时间:2023-03-10 03:37:40
标签:Python,优先级队列,queue
一、基本用法
Queue类实现了一个基本的先进先出容器。使用put()将元素增加到这个序列的一端,使用get()从另一端删除。具体代码如下所示:
import queue
q = queue.Queue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
运行之后,效果如下:
这里我们依次添加1到10到队列中,因为先进先出,所以出来的顺序也与添加的顺序相同。
二、LIFO队列
既然有先进先出队列queue,那么数据结构中肯定也有后进先出的队列。后进先出的队列为:LifoQueue,示例如下:
import queue
q = queue.LifoQueue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
运行之后,效果如下:
三、优先队列
在操作系统中,我们常常会根据优先级来处理任务,比如系统的优先级最高,我们肯定优先处理系统任务,然后才处理用户的任务。同样,queue库给我们提供了PriorityQueue来处理优先级的队列。
示例如下:
import queue
import threading
class Job:
def __init__(self, priority, desc):
self.priority = priority
self.desc = desc
print("New Job:", desc)
return
def __eq__(self, other):
try:
return self.priority == other.priority
except AttributeError:
return NotImplemented
def __lt__(self, other):
try:
return self.priority > other.priority
except AttributeError:
return NotImplemented
def process_Job(q):
while True:
next_job = q.get()
print(next_job.desc)
q.task_done()
q = queue.PriorityQueue()
q.put(Job(5, "Five Job"))
q.put(Job(15, "Fifteen Job"))
q.put(Job(1, "One Job"))
workers = [
threading.Thread(target=process_Job, args=(q,)),
threading.Thread(target=process_Job, args=(q,)),
]
for work in workers:
work.setDaemon(True)
work.start()
q.join()
运行之后,效果如下:
这里,我们默认数值越大优先级越高,可以看到15先执行,然后再是5,1任务。这个例子展现了有多个线程在处理任务时,要根据get()时队列中元素的优先级来处理。
来源:https://blog.csdn.net/liyuanjinglyj/article/details/115837391


猜你喜欢
- 在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很
- PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的
- 本文实例讲述了go语言base64用法。分享给大家供大家参考。具体如下:这里展示golang base64 的一个小例子,代码如下:pack
- 前言具有名字的插槽slot使用 中的 "name" 属性绑定元素注意:1,如果没有匹配到 则放到匿名的插槽中2,具名插槽
- 由于最近需要做项目,需要进行分词等,查了资料之后,发现python NLTK很强大,于是就想试试看。在网上找了很多安装资料,都不太完整,下载
- var long2="1988-0w-07";alert(long2.substring(0,4)+"----
- 🌌 专注Golang,Python语言,云原生,人工智能领域得博主💜 过去经历的意义在于引导你,而非定义你,💜 只要我们足够努力,任何人都有
- BS架构的企业级应用中,当一个表格列数较多时,用户一个常见的需求就是把前面几个重要的列固定住,这样拖动滚动条时固定的列会方便用户查看数据,用
- 本文实例讲述了java使用正则表达式判断邮箱格式是否正确的方法。分享给大家供大家参考。具体如下:import java.io.*;publi
- 遇到的问题:用户批量导入数据1000条,导入不成功的问题,提示查询不到商品资料。这个场景需要依靠批量的数据,每次测试的时候需要手动生成批量的
- 作者:Rung András原文:How To Engage Customers In Your E-Commerce Website对于我
- text.pytitle = '智能金融起锚:文因、数库、通联瞄准的kensho革命'text = ''
- 目录一、环境准备二、问题分析三、spider四、item五、setting六、pipelines七、middlewares八、使用jupyt
- 函数:strip() lstrip() rstrip()作用:去除字符串中的空格或指定字符一、默认用法:去除空格st
- 本文实例讲述了Python中迭代的用法,是一个非常实用的技巧。分享给大家供大家参考借鉴之用。具体分析如下:如果给定一个list或tuple,
- 本文为大家分享了windows下pycharm安装、创建文件、配置默认模板的具体步骤,供大家参考,具体内容如下步骤: 下包 —->安装
- 前言在实际工作中,我们很少会遇到一次性需要向页面中插入大量数据的情况,但是为了丰富我们的知识体系,我们有必要了解并清楚当遇到大量数据时,如何
- 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪。在.NET平台中,有非常著名的第三方开
- from http://www.devshed.com/c/a/MySQL/Error-Handling-Examples/ Error H
- 工作时常遇到需要在其它地方拷贝样式,比如Firebug之类的,但是复制出来的样式是带有换行和空格的,对于我这种有点洁癖的人来说,经常会一个个