import heapq
# 创建一个优先队列
class PriorityQueue:
def __init__(self):
self._queue = []
self._index = 0
def push(self, item, priority):
# 使用元组 (priority, index, item) 来确保即使两个元素的优先级相同,也能根据插入顺序排序
heapq.heappush(self._queue, (priority, self._index, item))
self._index += 1
def pop(self):
# 弹出并返回具有最高优先级的元素
if self._queue:
return heapq.heappop(self._queue)[-1]
raise KeyError('pop from an empty priority queue')
def is_empty(self):
return len(self._queue) == 0
# 示例使用
pq = PriorityQueue()
pq.push('task1', 3)
pq.push('task2', 1)
pq.push('task3', 2)
while not pq.is_empty():
print(pq.pop())
heapq 模块:Python 的 heapq 模块提供了堆队列算法的实现,也称为优先队列算法。它是一个二叉堆,支持高效的最小值查找、插入和删除操作。PriorityQueue 类:我们定义了一个 PriorityQueue 类来封装优先队列的功能。__init__ 方法初始化一个空的堆队列,并设置索引为 0。push 方法将任务及其优先级添加到队列中。为了确保相同优先级的任务按插入顺序处理,我们使用了 (priority, index, item) 这样的元组。pop 方法弹出并返回具有最高优先级的任务。如果队列为空,则抛出异常。is_empty 方法检查队列是否为空。PriorityQueue 实例,向其中添加几个任务,并依次弹出并打印任务。希望这段代码和解释对你有帮助!
上一篇:python中replace函数
下一篇:python retrying
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站