TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5027 789
Как отменять задачи в heapq и сохранять порядок при равных приоритетах

heapq сравнивает кортежи по полям. Поэтому запись (приоритет, задача) при равных приоритетах либо сравнит сами задачи, либо упадёт, если объекты несравнимы. Надёжная форма: (приоритет, номер, задача), где номер выдаёт itertools.count(). Он сохраняет порядок добавления и не допускает сравнения задач.

Искать и удалять произвольную запись по идентификатору куча эффективно не умеет. Для отмены и смены приоритета можно хранить активные записи в словаре: старую помечать удалённой, новую добавлять в кучу, а помеченные пропускать при извлечении. Лень здесь вполне питонична.

У этой схемы очереди есть цена: устаревшие записи занимают память, пока не доберутся до вершины. Если обновлений много, а извлечений мало, кучу стоит периодически пересобирать из активных записей.
  • 👀 1
More from @zen_of_python
  1. Sep 30, 2026Пакетная обработка в Python: где strict=True не спасает запись С Python 3.12 itertools.bat…
  2. Sep 30, 2026Как воспроизводить гонки потоков Python с помощью blanket Обычно порядок выполнения потоко…
  3. Sep 29, 2026Как битовые множества сокращают память моделей Pydantic Explicit is better than implicit,…
  4. Sep 29, 2026Как проверять плагины через контракт Pydantic и FastAPI Сервис может отвечать по нужным ад…
  5. Sep 29, 2026Как OpenBLAS ускоряет NumPy в браузере Раньше браузерная сборка NumPy выполняла np.matmul…
  6. Sep 28, 2026partial или lambda: как специализировать колбэк без сюрпризов functools.partial заранее св…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →