• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-07) 21次浏览 已收录 0个评论
文章目录[隐藏]

queue库提供了一个适用于多线程编程的先进先出(FIFO)数据结构,可以用来在生产者与消费者线程之间安全地传递消息或其他数据,它会为调用者处理锁定,使多个线程可以安全而更容易地处理同一个Queue实例.Queue的大小可能受限,以限制内存使用或处理,需要的朋友可以参考下

一、基本用法

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

 <p style="color:transparent">来源gao!%daima.com搞$代*!码网</p>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 内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是Python数据结构之优先级队列queue用法详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python数据结构之优先级队列queue用法详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址