← retour aux snippets

heapq: file de priorité pour tâches

Planifier des tâches avec priorités en utilisant un tas binaire.

objectif

Planifier des tâches avec priorités en utilisant un tas binaire.

code minimal

import heapq, itertools

counter = itertools.count()
heap = []
def push(priority, item):
    heapq.heappush(heap, (priority, next(counter), item))

def pop():
    return heapq.heappop(heap)[-1]

push(10, "low"); push(1, "high"); push(10, "low2")
print(pop() == "high")  # attendu: True

utilisation

import heapq
h = []
heapq.heappush(h, (2, "b")); heapq.heappush(h, (1, "a"))
print(heapq.heappop(h)[1] == "a")

variante(s) utile(s)

import heapq, itertools
heap = []; c = itertools.count()
for p in [5,3,4]: heapq.heappush(heap, (p, next(c)))
print([heapq.heappop(heap)[0] for _ in range(3)] == [3,4,5])

notes

  • Ajoutez un compteur pour stabiliser l’ordre entre priorités égales.
  • Les priorités plus petites sortent en premier (min-heap).