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()时队列中元素的优先级来处理。
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/liyuanjinglyj/article/details/115837391
上一篇:SecureCRTSecure7.0查看连接密码的步骤
栏 目:Python教程
本文标题:Python数据结构之优先级队列queue用法详解
本文地址:https://www.zyku.net/python/9798.html
您可能感兴趣的文章
- 11-19autosleep切换主题步骤介绍
- 04-26Nginx实战之反向代理WebSocket的配置
- 01-03小减压-小减压应用软件功能介绍
- 04-06小米11ultra副屏设置方法
- 08-15vsCode字母排序方法介绍
- 09-25汽车之家删除自己的帖子方法介绍
- 01-11四年级下册语文帮-四年级下册语文帮应
- 07-05Linux sleep命令
- 01-23华为手机自带相机怎么拍正方形照片
- 08-14小米蓝牙音箱2如何绑定wifi
- 02-17opporeno5通话背景设置方法
- 10-04微博登录信息在哪里查询
- 03-25小爱音箱进入配对模式教程
- 04-01真我v11返回键设置方法
- 10-30免费自用图床,稳定极速图床
- 12-30源无忧wifi卫士-源无忧wifi卫士应用软
- 10-24华为p50如何拍超级月亮
- 02-09小米11开启隐藏相册功能教程
- 02-25一加9pro开启无线充电静音模式教程
- 09-12小米手机负一屏添加健康码教程介绍
最近更新
阅读排行
猜你喜欢
- 11-15QQ音乐宠物怎么换
- 02-19phpcms自定义参数的使用说明
- 01-17神段子-神段子应用软件功能介绍
- 06-13CKEditor编辑器allowedContent过滤器
- 07-05MySQL查询结果也按照in里面的字段值顺
- 09-20抖音在哪里找到热门素材
- 12-30练氪-练氪应用软件功能介绍
- 01-11桌面壁纸秀-桌面壁纸秀应用软件功能介
- 04-15荣耀v40轻奢版设置单手模式教程
- 02-15苹果12隐藏通知消息内容设置方法