新闻动态

Python数据结构之优先级队列queue用法详解

发布日期:2022-04-04 10:17 | 文章来源:gibhub

一、基本用法

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()时队列中元素的优先级来处理。

到此这篇关于Python数据结构之优先级队列queue用法详解的文章就介绍到这了,更多相关Python队列queue 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

香港服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部