Напиши программу планировщик задач на Python
python
import heapq
import time
class TaskScheduler:
def __init__(self):
self.tasks = []
self.counter = 0
def add_task(self, task, priority=0):
heapq.heappush(self.tasks, (priority, self.counter, task))
self.counter += 1
def run(self):
while self.tasks:
_, _, task = heapq.heappop(self.tasks)
task()
def delay_task(self, task, priority=0, delay=0):
time.sleep(delay)
self.add_task(task, priority)
# Пример использования планировщика задач
def task1():
print("Task 1")
def task2():
print("Task 2")
def task3():
print("Task 3")
def main():
scheduler = TaskScheduler()
# Добавление задач с разными приоритетами
scheduler.add_task(task1, priority=2)
scheduler.add_task(task2, priority=1)
scheduler.add_task(task3, priority=3)
# Запуск задач в порядке приоритетов
scheduler.run()
# Задержка выполнения задачи
scheduler.delay_task(task1, priority=2, delay=5)
scheduler.delay_task(task2, priority=1, delay=2)
scheduler.delay_task(task3, priority=3, delay=3)
# Запуск задач в порядке приоритетов с задержкой
scheduler.run()
if __name__ == "__main__":
main()
В этой программе определен класс `TaskScheduler`, который представляет собой планировщик задач. В конструкторе класса инициализируются пустой список задач `self.tasks` и счетчик задач `self.counter`.
Метод `add_task` добавляет новую задачу в список `self.tasks` с указанным приоритетом. Задачи представлены как кортежи `(priority, counter, task)`, где `priority` - приоритет задачи, `counter` - счетчик задачи (используется для устранения неопределенности при равных приоритетах) и `task` - сама задача (функция).
Метод `run` запускает задачи, извлекая их из списка `self.tasks` в порядке приоритетов с помощью функции `heapq.heappop`. Задачи выполняются, вызывая функции, хранящиеся в списках `self.tasks`.
Метод `delay_task` позволяет задержать выполнение задачи на указанное время с помощью функции `time.sleep`. Сначала выполняется задержка, а затем задача добавляется в список `self.tasks` с указанными приоритетом и счетчиком.
Пример использования планировщика задач показывает добавление задач с разными приоритетами и запуск задач в порядке приоритетов с помощью метода `run`. Затем задачи задерживаются с помощью метода `delay_task` и запускаются с помощью метода `run`. Результат выполнения программы будет выводить на экран названия задач и соответствующие приоритеты в порядке выполнения.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет