在Python文档中,
最低值的条目首先被检索(最低值的条目是由返回的条目sorted(list(entries))[0])。条目的典型模式是形式为的元组(priority_number, data)。
sorted(list(entries))[0]
(priority_number, data)
看来队列将按优先级排序,然后按数据排序,这可能并不总是正确的。假设数据“项目2”在“项目1”之前入队,则项目1仍将排在第一位。在另一个文档页面heapq中,它建议使用计数器。所以我将数据存储为entry = [priority, count, task]。是否没有类似的东西
entry = [priority, count, task]
PriorityQueue.put(item, priority)
那我就不需要自己执行订购吗?
据我所知,您要找的东西不是开箱即用的。无论如何,请注意,实现起来并不难:
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