В Python есть Queue.PriorityQueue, но я не вижу способа сделать каждое значение в нем уникальным, поскольку нет метода проверки того, существует ли уже значение (например, find (name) или аналогичный). Более того, PriorityQueue требует, чтобы приоритет оставался в пределах значения, поэтому я не мог даже искать свое значение, так как мне также нужно было знать приоритет. Вы должны использовать (0,5, myvalue) как значение в PriorityQueue, а затем оно будет отсортировано по первому элементу кортежа.
С другой стороны, класс collections.deque предлагает функцию для проверки того, существует ли значение уже, и он даже более естественен в использовании (без блокировки, но все еще атомарен), но не предлагает способа сортировки по приоритету.
Есть несколько других реализаций stackoverflow с heapq, но heapq также использует приоритет внутри значения (например, в первой позиции кортежа), поэтому он не подходит для сравнения уже существующих значений.
Создание очереди приоритетов Python
https://stackoverflow.com/questions/3306179/priority-queue-problem-in-python < / а>
Как лучше всего создать очередь с атомарным приоритетом (= может использоваться из нескольких потоков) с уникальными значениями?
Пример того, что я хочу добавить:
- Приоритет: 0,2, значение: значение1
- Приоритет: 0,3, значение: значение2
- Приоритет: 0,1, Значение: значение3 (извлекается сначала автоматически)
- Priority: 0.4, Value: value1 (не добавляется повторно, даже если у него другой приоритет)