如果我想在PriorityQueue中打印值,我怎么做呢?我扩展了PriortiyQueue,并访问了底层列表queue。但是,当我执行for循环时,我得到了添加项的顺序。
# the ADT PriorityQueue
class ReadyQueue(PriorityQueue):
...
def listAll(self):
print("PID \t Name \t Status \t Priority")
print("=" * 42)
for _, _, pcb in self.queue:
print(pcb)
# ADT
class PCB:
...
def __lt__(self, other):
selfPriority = (self.priority, self.creationTime)
otherPriority = (other.priority, other.creationTime)
return selfPriority < otherPriority
# in the main function
q = ReadyQueue()
q.enqueue(PCB("p1", 0, None, q))
q.enqueue(PCB("p8", 6, None, q))
q.enqueue(PCB("p2", 1, None, q))
q.enqueue(PCB("p0", 1, None, q))
q.enqueue(PCB("p6", 1, None, q))
q.enqueue(PCB("p4", 1, None, q))
q.enqueue(PCB("p3", 2, None, q))
q.listAll()产出:
PID Name Status Priority
==========================================
0 p1 ready_s 0
3 p0 ready_s 1
2 p2 ready_s 1
1 p8 ready_s 6
4 p6 ready_s 1
5 p4 ready_s 1
6 p3 ready_s 2注意优先权是不对的。虽然它们也没有按造物顺序出现.我错过了什么吗?
发布于 2012-02-18 10:32:45
PriorityQueue使用heapq推送和弹出元素,http://docs.python.org/library/heapq.html
因此,队列是堆,而不是排序列表。
https://stackoverflow.com/questions/9340352
复制相似问题