Найти в Дзене
EasyCode

Python - куча и очередь с приоритетом (создание приоритетов выполнения функций, очередей)

Допустим у нас стоит задача, расставить приоритеты выполнения функций.
Класс управления очередями будет выглядеть так:
import time
import heapq

Допустим у нас стоит задача, расставить приоритеты выполнения функций.

Класс управления очередями будет выглядеть так:

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