yel*_*yed 35 python heap priority-queue data-structures
在蟒蛇有一个内置的heapq算法,让你push,pop,nlargest,nsmallest...等,你可以申请名单.但是,也有queue.PriorityQueue类似乎支持或多或少相同的功能.有什么区别,你何时会使用另一个?
Mar*_*ers 40
Queue.PriorityQueue是一个线程安全的类,而heapq模块没有线程安全保证.从Queue模块文档:
该
Queue模块实现了多生产者,多消费者队列.当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用.Queue此模块中的类实现了所有必需的锁定语义.这取决于Python中线程支持的可用性; 看threading模块.
该heapq模块不提供锁定,并且可以在标准list对象上运行,这些对象并不是线程安全的.
事实上,PriorityQueue 实现使用heapq引擎来进行所有优先级排序工作,基Queue类提供锁定以使此线程安全.有关详细信息,请参阅源代码.
这使heapq模块更快; 没有锁定开销.此外,您可以以heapq不同的,新颖的方式自由使用各种功能,PriorityQueue仅提供直接排队功能.
Ror*_*ton 13
queue.PriorityQueue是类的部分包装器heapq。
换句话说, aqueue.PriorityQueue实际上是 a heapq,放置在队列模块中,并带有几个重命名的方法,以使其heapq更易于使用,就像常规队列一样。
在 中heapq,您使用方法heappush()添加新项目和heappop()删除新项目的方法。这不是很像队列,所以queue.PriorityQueue让你使用通常的队列方法,比如put和get来做同样的事情。
有一些功能heapq没有被继承到 中queue.PriorityQueue,例如heappushpop()和heapreplace(),但您不太可能使用这些功能。如果你需要它们(我在我当前的项目中是这样做的),也许你应该使用heapq而不是queue.PriorityQueue.
此外,由于heapq专门用于其目的,因此它不是线程安全的(如此处的另一个答案所述。)
| 归档时间: |
|
| 查看次数: |
8881 次 |
| 最近记录: |