【问题标题】:python3 priorityqueue size by priority?python3 priorityqueue 大小按优先级?
【发布时间】:2018-01-12 21:44:17
【问题描述】:

有没有办法为每个优先级获取优先级队列的 .size() ?

假设我有一个对象,我将把它放入优先级队列中,优先级基于 some_variable 的状态...

q = PriorityQueue()

if some_variable:
    q.put((1, my_object))
else:
    q.put((2, my_object))

然后我可以通过询问某种 .qsize() 方法来找出答案,例如可能是...的变体

q.qsize() 

但不是队列的总大小,我想知道两个单独的“组”/优先级中的每一个的大小(qsize where priority==1,qsize where priority==2),在这个案例。

而不仅仅是总的 q.qsize()?希望这是有道理的。

【问题讨论】:

  • 我认为您没有正确使用队列。你想q.put((1, my_object)),而不是q.put(1, my_object)。一个项目应该是优先级和实际有效负载的元组。另外,q.qsize() 方法也不可靠。
  • sry 我转录的代码没有额外的一组括号组成元组 - 你是对的 - (修复......)

标签: python python-3.x queue priority-queue


【解决方案1】:

我能看到的最简单的方法是

from collections import Counter
sizeByPriority = Counter(priority for priority, _elem in q.queue)

但这当然需要遍历整个队列,这在您的情况下可能会令人望而却步,而且可能不是线程安全的。

【讨论】:

  • 这绝对让我更接近能够做和探索我想做的事情。谢谢!一个后续问题。每次向队列中添加项目时是否需要实例化 Counter 对象(因为,如果我只实例化一次,它不会只知道实例化时 q.queue 的状态吗?)。
  • 是的,计数器不会自动改变。如果在需要时重建它变得太昂贵,您可能会考虑在每次向队列中添加某些内容或从中删除某些内容时更新它。不过,根据您的架构,这可能会变得很棘手。
猜你喜欢
  • 2012-06-15
  • 2011-07-24
  • 2015-05-23
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2014-03-04
  • 2010-12-24
相关资源
最近更新 更多