Python有Queue.PriorityQueue类,但我无法找到一种方法使其中的每个值都是唯一的,因为它没有检查值是否已存在的方法(例如find(name)或类似方法)。此外,PriorityQueue需要优先级保留在值内,所以我甚至无法搜索我的值,因为我还必须知道优先级。在PriorityQueue中,您将使用(0.5, myvalue)作为值,然后它将按元组的第一个元素进行排序。
另一方面,collections.deque类确实提供了一个用于检查值是否已存在的函数,而且使用起来更加自然(没有锁定,但仍然是原子的),但它不提供按优先级排序的方式。
stackoverflow上有一些使用heapq的其他实现,但heapq也在值内使用优先级(例如在元组的第一个位置),因此似乎不适合比较已经存在的值。
https://stackoverflow.com/questions/3306179/priority-queue-problem-in-python
创建一个原子优先队列(=可以从多个线程使用)并具有唯一值的最佳方法是什么?
以下是我想要添加的示例:
- 优先级: 0.2,值:value1
- 优先级: 0.3,值:value2
- 优先级: 0.1,值:value3(应该自动首先检索)
- 优先级: 0.4,值:value1(不应再次添加,即使具有不同的优先级)
self.set
。 - sleepsort