一尘不染

如何将项目放入优先级队列?

python

在Python文档中,

最低值的条目首先被检索(最低值的条目是由返回的条目sorted(list(entries))[0])。条目的典型模式是形式为的元组(priority_number, data)

看来队列将按优先级排序,然后按数据排序,这可能并不总是正确的。假设数据“项目2”在“项目1”之前入队,则项目1仍将排在第一位。在另一个文档页面heapq中,它建议使用计数器。所以我将数据存储为entry = [priority, count, task]。是否没有类似的东西

PriorityQueue.put(item, priority)

那我就不需要自己执行订购吗?


阅读 163

收藏
2021-01-20

共1个答案

一尘不染

据我所知,您要找的东西不是开箱即用的。无论如何,请注意,实现起来并不难:

from Queue import PriorityQueue

class MyPriorityQueue(PriorityQueue):
    def __init__(self):
        PriorityQueue.__init__(self)
        self.counter = 0

    def put(self, item, priority):
        PriorityQueue.put(self, (priority, self.counter, item))
        self.counter += 1

    def get(self, *args, **kwargs):
        _, _, item = PriorityQueue.get(self, *args, **kwargs)
        return item


queue = MyPriorityQueue()
queue.put('item2', 1)
queue.put('item1', 1)

print queue.get()
print queue.get()

输出示例:

item2
item1
2021-01-20