优先队列(PriorityQueue)是队列的变体,按优先级顺序(最低优先)检索打开的条目。
条目通常是以下格式的元组:
插入格式:q.put((priority number, data))
特点:默认priority number 越小,优先级越高
其他的操作和队列相同
最常用的成员函数
put() 插入元素
get()取队首元素的值并将其弹出.
full() 判断是否为满.
empty() 判断是否为空.
# -*- coding: utf-8 -*
import queue
# 定义比较的元素对象
class Task(object):
def __init__(self, priority, name):
self.priority = priority
self.name = name
def __str__(self):
return "Task(priority={p}, name={n})".format(p=self.priority, n=self.name)
def __lt__(self, other):
""" 定义<比较操作符。"""
# 从大到小排序
return self.priority > other.priority
tsq = queue.PriorityQueue()
# 插入元素
tsq.put_nowait(Task(3, "task1")) # 自定义的类定义了__lt__, 可以比较大小
tsq.put_nowait(Task(1, "task2"))
tsq.put_nowait(Task(2, "task3"))
# 遍历队列
print("取队首元素之前:")
for item in tsq.queue:
print(item)
# 取队首
print("取到队首")
print(tsq.get()) # return: Task(priory=3, name=task1)
# 遍历队列
print("取队首元素之后:")
for item in tsq.queue:
print(item)
print("队列长度:")
print(tsq.qsize())
print("队列是否为空:")
print(tsq.empty())

官方文档:https://docs.python.org/3/library/queue.html
源代码:https://github.com/python/cpython/blob/3.11/Lib/queue.py