我使用python的Queue.PriorityQueue,遇到了以下问题:当向队列插入多个具有相同优先级的元素时,我希望队列按照插入顺序(FIFO)为它们提供服务。由于某些原因,情况并非如此:>>> from Queue import PriorityQueue
>>>
>>> j1 = (1, 'job1')
>>> j2 = (1, 'job2')
>>> j3 = (1, 'job3')
>>> j4 = (1, 'job4')
>>>
>>> q = PriorityQueue()
>>> q.put(j1)
>>> q.put(j2)
>>> q.put(j3)
>>> q.put(j4)
>>> q.queue
[(1, 'job1'), (1, 'job2'), (1, 'job3'), (1, 'job4')]
>>> q.get()
(1, 'job1')
>>> q.queue
[(1, 'job2'), (1, 'job4'), (1, 'job3')]
从这个例子中可以看出,在一个get()之后,顺序是混合的。
原因是什么?如何克服(保持相同优先级元素的顺序)?在
编辑:
我被要求添加一个例子来说明q.get()实际上把FIFO排序搞得一团糟,所以这里有一个详细的例子:
^{pr2}$
现在,我将逐个将元素出列。预期的结果是:先退出,然后剩下的,FIFO命令:Build,Clean,Create,Build,Clean:>>> q.get()
Job("QUIT", data={})
>>> q.get()
Job("Build", data={})
>>> q.get()
Job("Clean", data={})
>>> q.get()
Job("Build", data={}) # <
>>> q.get()
Job("Clean", data={})
>>> q.get()
Job("Create", data={})