учебный путь · python

Планировщик «Конвейер»

  • Python
  • Средний
  • 5 модулей
  • 25 задач
  • 5 задач · бесплатно до модуля 1 из 5

Соберите оркестратор фоновых задач: реестр со статусами, граф зависимостей с топологической сортировкой и обнаружением циклов, политику повторов, cron-расписание и тик планировщика. Время — виртуальные минуты.

AI-ассистент ведёт подсказками, но решение не выдаёт
intro

Что тебя ждёт в этом пути

Автор программы:

Что ты построишь

Оркестратор фоновых задач «Конвейер» из 25 задач в пяти паках, на виртуальных минутах вместо реального времени. Бесплатный пак — реестр задач: создание, добавление без дублей, поиск по id. Premium-паки собирают граф зависимостей с топологической сортировкой и обнаружением циклов, политику повторов с экспоненциальным бэкоффом, cron-расписание с поиском следующего запуска и минут до него, и финальный тик планировщика, который переводит задачи по машине состояний и прогоняет весь конвейер до конца. Каждое решение проверяется на скрытых входных данных.

Для кого

Для тех, кто хочет разобрать механику фонового планировщика — как в Celery, cron или очередях задач — на уровне кода, а не только конфигурации. Уровень средний: нужна база Python с функциями и словарями, дальше логика планировщика строится с нуля по ходу пути.

Чему научишься

  • Хранить реестр задач без мутации исходного списка и без дублей по id
  • Строить граф зависимостей и находить задачи, готовые к запуску прямо сейчас
  • Выстраивать топологический порядок и честно падать на цикле в зависимостях
  • Считать экспоненциальную задержку перед повтором и решать, когда исчерпан лимит попыток
  • Проверять срабатывание cron-расписания «каждые N минут» и находить следующий запуск
  • Собирать список просроченных задач, которые планировщик не успел обработать
  • Переводить задачу по машине состояний и прогонять тики планировщика до завершения всего конвейера
curriculum

Задачи пути — 5 модулей, 25 задач

Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.

25 задач · 5 модулей
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 Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start python-task-scheduler

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.