一、基本用法
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 内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
黄山市民网:https://www.huangshanshimin.com/