Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import heapq
- from collections import namedtuple
- Task = namedtuple('Task', 'priority, id, content')
- class TaskFlow:
- def __init__(self):
- self._queue = []
- self._id = 0
- def add_task(self, priority, content):
- self._id += 1
- # минус priority, чтобы доставать задачи с наибольшим приоритетом
- heapq.heappush(self._queue,
- Task(-priority, self._id, content))
- return self._id
- def pop(self) -> Task:
- # мы извлекаем наименьший элемент
- # в кортеже 3 элемента, сравнение идет слева направо
- # сначала по приоритету с минусом (т.е. достаем наибольший приоритет)
- # если приотритеты равны, то с наименьшим id (т.е. тот, что был добавлен раньше)
- return heapq.heappop(self._queue)
- def empty(self):
- return not self._queue
- flow = TaskFlow()
- # добавим задачи в разнобой
- flow.add_task(90, 'умывание')
- flow.add_task(10, 'мыть тарелки')
- flow.add_task(100, 'подъем')
- # если приоритет одинаковый - сначала будет более раннее, затем позднее
- flow.add_task(50, 'готовить завтрак')
- flow.add_task(50, 'завтракать')
- # пока есть задачи, будем доставать их и печатать
- while not flow.empty():
- print(flow.pop())
- # вывод:
- # Task(priority=-100, id=3, content='подъем')
- # Task(priority=-90, id=1, content='умывание')
- # Task(priority=-50, id=4, content='готовить завтрак')
- # Task(priority=-50, id=5, content='завтракать')
- # Task(priority=-10, id=2, content='мыть тарелки')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement