queueutils
-优先级队列¶
Python附带了许多优秀的数据结构,来自 dict
至 collections.deque
,并且不乏可用的算法实现,来自 sorted()
至 bisect
。但奇怪的是,优先级队列被归类为 heapq
。即使在那里,提出的方法也不是全功能的和面向对象的。有一个内置的优先级队列, Queue.PriorityQueue
,但除了其严酷的API之外,它还带有线程安全的双刃剑,使其适用于多线程、多使用者应用程序,但对于协作/单线程用例来说,开销很高。
这个 queueutils
模块目前提供两种队列实现: HeapPriorityQueue
,基于堆,以及 SortedPriorityQueue
,基于排序列表。两者都使用统一的API,基于 BasePriorityQueue
以便于在不同的应用程序用例上测试略有不同的性能特征。
>>> pq = PriorityQueue()
>>> pq.add('low priority task', 0)
>>> pq.add('high priority task', 2)
>>> pq.add('medium priority task 1', 1)
>>> pq.add('medium priority task 2', 1)
>>> len(pq)
4
>>> pq.pop()
'high priority task'
>>> pq.peek()
'medium priority task 1'
>>> len(pq)
3
- class boltons.queueutils.BasePriorityQueue(**kw)[源代码]¶
此模块中其他PriorityQueue的抽象基类。重写
_backend_type
属性,以及_push_entry()
和_pop_entry()
自定义子类行为的静态方法。)别忘了用staticmethod()
)。- 参数:
priority_key (callable) -- 一个函数,它需要 priority 路过的时候
add()
并返回表示有效优先级的实数。
- class boltons.queueutils.HeapPriorityQueue(**kw)[源代码]¶
继承自的优先级队列
BasePriorityQueue
,在列表的支持下,基于heapq.heappop()
和heapq.heappush()
内置中的函数heapq
模块。
- boltons.queueutils.PriorityQueue¶
- class boltons.queueutils.SortedPriorityQueue(**kw)[源代码]¶
继承自的优先级队列
BasePriorityQueue
,基于bisect.insort()
按顺序插入到排序列表中的方法。