Допустим у нас стоит задача, расставить приоритеты выполнения функций.
Класс управления очередями будет выглядеть так:
import time
import heapq
class PriorityQueue:
def __init__(self):
self._q = []
def add(self, value, priority=0):
heapq.heappush(self._q, (priority, time.time(), value))
def pop(self):
return heapq.heappop(self._q)[-1]
Создаем тестовые функции для наглядности работы очереди.
def f1(): print('hello')
def f2(): print('world')
def f3(): print('send email')
def f4(): print('file upload to cdn')
def f5(): print('spam check')
Вызываем класс очередей и добавляем наши тестовые функции в очередь с приоритетами, priority=0 выполнится первым и далее по возрастанию.
pq = PriorityQueue()
pq.add(f1, priority=1)
pq.add(f2, priority=3)
pq.add(f3, priority=4)
pq.add(f4, priority=2)
pq.add(f5, priority=0)
Вызовем функции pq.pop()()
pq.pop()()
результат работы будет: spam check
если продолжить вызывать функцию pq.pop()() снова и снова то вы увидите порядок выполнения наших тестовых функций:
1. spam check
2. hello
3. file upload to cdn
4. world
5. send email