如何将对象 to/from 入队和出队 python 3 中的优先级队列
How to enqueue and dequeue objects to/from a priority queue in python 3
我正在 python 3 中编写一个程序来对称为数据包的对象进行入队和出队。这些数据包具有与其关联的优先级,我希望优先级队列按优先级顺序使数据包出队。下面是代码:
if(pkt.pktId != -1):
print("pktID: ", pkt.pktId, "srcID :", pkt.srcID)
arbiter1.put(pkt.pri, pkt)
while ((arbiter1.empty()==False) and (queueList[0].full()==False)):
x= arbiter1.get()
queueList[0].put(arbiter1.get())
Pkt 是 Packet Class() 类型,包含多个字段。其中一个字段是 pri。
当我出列 "x" 并打印 x 时,它给我一个 int 而不是对象 pkt。
我假设您使用的是 stdlib priority queue class:
import queue
arbiter1 = queue.PriorityQueue()
在这种情况下,当您调用 arbiter1.put(pkt.pri, pkt)
时,您实际上是将优先级整数作为 "item" 传递,并将数据包作为 "block" 标志传递:
def put(self, item, block=True, timeout=None):
...
相反,您可以传递元组:
arbiter1.put((pkt.pri, pkt))
并取出元组:
priority, pkt = arbiter1.get()
如果数据包没有定义任何顺序并且可能有具有相同优先级的数据包,那么您还需要在元组中使用决胜局。简单的整数就可以了
import itertools
tiebreaker = itertools.count()
arbiter1.put((pkt.pri, next(tiebreaker), pkt))
priority, _, pkt = arbiter1.get()
我正在 python 3 中编写一个程序来对称为数据包的对象进行入队和出队。这些数据包具有与其关联的优先级,我希望优先级队列按优先级顺序使数据包出队。下面是代码:
if(pkt.pktId != -1):
print("pktID: ", pkt.pktId, "srcID :", pkt.srcID)
arbiter1.put(pkt.pri, pkt)
while ((arbiter1.empty()==False) and (queueList[0].full()==False)):
x= arbiter1.get()
queueList[0].put(arbiter1.get())
Pkt 是 Packet Class() 类型,包含多个字段。其中一个字段是 pri。
当我出列 "x" 并打印 x 时,它给我一个 int 而不是对象 pkt。
我假设您使用的是 stdlib priority queue class:
import queue
arbiter1 = queue.PriorityQueue()
在这种情况下,当您调用 arbiter1.put(pkt.pri, pkt)
时,您实际上是将优先级整数作为 "item" 传递,并将数据包作为 "block" 标志传递:
def put(self, item, block=True, timeout=None):
...
相反,您可以传递元组:
arbiter1.put((pkt.pri, pkt))
并取出元组:
priority, pkt = arbiter1.get()
如果数据包没有定义任何顺序并且可能有具有相同优先级的数据包,那么您还需要在元组中使用决胜局。简单的整数就可以了
import itertools
tiebreaker = itertools.count()
arbiter1.put((pkt.pri, next(tiebreaker), pkt))
priority, _, pkt = arbiter1.get()