учебный путь · python
Планировщик «Конвейер»
Соберите оркестратор фоновых задач: реестр со статусами, граф зависимостей с топологической сортировкой и обнаружением циклов, политику повторов, cron-расписание и тик планировщика. Время — виртуальные минуты.
AI-ассистент ведёт подсказками, но решение не выдаёт
curriculum
Задачи пути — 5 модулей, 25 задач
Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.
1.1
Создание задачи
Соберите задачу планировщика «Конвейер» — с зависимостями и статусом ожидания
1.2
Добавление задачи в реестр
Добавьте задачу в реестр «Конвейера» без дублей по id и без мутации исходного списка
1.3
Поиск задачи по id
Найдите в реестре «Конвейера» первую задачу по id или верните None
1.4
Статус задачи по id
Соберите запрос статуса задачи «Конвейера»: достать задачу по id и прочитать её поле status
1.5
Сборка реестра из спеков
Соберите реестр «Конвейера» из списка спецификаций задач через make_task и add_task
2.1
Зависимости задачи
Достаньте список задач-предшественниц из графа зависимостей «Конвейера» — отдельной копией
2.2
Готова ли задача к запуску
Проверьте, выполнены ли все зависимости задачи «Конвейера» — через готовый предикат
2.3
Готовые к запуску задачи
Найдите все задачи «Конвейера», которые можно запускать прямо сейчас — отсортированными
2.4
Топологический порядок задач
Выстройте задачи «Конвейера» в порядок запуска; на графе с циклом — честно падайте
2.5
Обнаружение цикла в графе
Капстоун графа «Конвейера»: есть ли в зависимостях цикл — поверх топологической сортировки
3.1
Задержка перед повтором
Посчитайте экспоненциальную паузу перед очередной попыткой упавшей задачи «Конвейера»
3.2
Решение о повторе
Решите, давать ли упавшей задаче «Конвейера» ещё одну попытку — пока не исчерпан лимит
3.3
Время следующего повтора
Назначьте момент, когда «Конвейер» вернётся к упавшей задаче, прибавив бэкофф к текущему времени
3.4
Применение повтора
Подготовьте упавшую задачу «Конвейера» к повтору: увеличьте счётчик попыток и назначьте новое время
3.5
Политика повторов
Соберите политику повторов «Конвейера»: дать упавшей задаче ещё попытку или признать её провалившейся
4.1
Запуск на минуте
Проверьте, выпадает ли срабатывание «каждые N минут» ровно на эту минуту расписания
4.2
Следующий запуск
Найдите ближайшую минуту срабатывания строго после текущей — даже если сейчас расписание срабатывает
4.3
Минут до запуска
Посчитайте, через сколько минут расписание сработает в следующий раз — ноль, если оно срабатывает прямо сейчас
4.4
Просроченные задачи
Соберите отсортированные id задач, чья минута запуска уже позади — те, что планировщик прозевал
4.5
Сборка расписания
Соберите cron-расписание целиком: каждому job — его минута следующего запуска после now
5.1
Допустимость перехода статуса
Проверьте по машине состояний «Конвейера», разрешён ли переход задачи из одного статуса в другой
5.2
Перевод задачи в новый статус
Переведите задачу в новый статус по машине состояний, а недопустимый переход отклоните точной ошибкой
5.3
Задачи, готовые к запуску
Соберите отсортированный список id задач, которые планировщик может запустить прямо сейчас
5.4
Один тик планировщика
Соберите один тик планировщика из двух шагов: повысьте готовые задачи и запустите тех, что ждут
5.5
Прогон планировщика до конца капстоун
Соберите планировщик целиком: прогоните тики, пока весь конвейер задач не отработает
❯ koddo start python-task-scheduler
Готов начать этот путь?
Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.