您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python数据结构之优先级队列queue用法详解

51自学网 2021-10-30 22:37:18
  python
这篇教程Python数据结构之优先级队列queue用法详解写得很实用,希望能帮到您。

一、基本用法

Queue类实现了一个基本的先进先出容器。使用put()将元素增加到这个序列的一端,使用get()从另一端删除。具体代码如下所示:

import queueq = 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 queueq = queue.LifoQueue()for i in range(1, 10):    q.put(i)while not q.empty():    print(q.get(), end="  ")

运行之后,效果如下:

后进先出

三、优先队列

在操作系统中,我们常常会根据优先级来处理任务,比如系统的优先级最高,我们肯定优先处理系统任务,然后才处理用户的任务。同样,queue库给我们提供了PriorityQueue来处理优先级的队列。

示例如下:

import queueimport threadingclass 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 NotImplementeddef 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 内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python GUI之如何使用tkinter控件
Python基础之模块相关知识总结
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。