Что такое Prefect
Что проверяют
Знаете ли вы класс инструментов оркестрации и можете ли объяснить, зачем он нужен поверх cron и обычных скриптов. Отвечая, полезно сразу сравнить Prefect с классическими планировщиками: это вторая половина вопроса, даже если её не задали вслух.
Как отвечать
Prefect это библиотека и сервис оркестрации рабочих процессов на Python. Задача помечается декоратором, поток собирается из обычного кода, а платформа берёт на себя состояния запусков, повторы, расписание, журнал и оповещения.
from prefect import flow, task
@task(retries=3, retry_delay_seconds=30)
def extract(day: str) -> list[dict]: ...
@flow(name="daily_etl")
def daily_etl(day: str):
load(transform(extract(day)))Главное отличие от классических планировщиков: граф не описывается заранее, он складывается во время выполнения. Ветвления, циклы и динамическое число задач это обычный Python, а не отдельный язык описания, при этом оркестратор видит каждую задачу как сущность со своим состоянием.
Что ещё назвать: развёртывания и расписания, пулы работ и исполнители, запускающие код на вашей инфраструктуре, блоки для доступов и подключений, кеширование результатов по ключу, ограничения параллелизма, оповещения по событиям.
Честная рамка выбора звучит так: планировщик с интервалами данных силён в регулярных расчётах и досчёте задним числом, Prefect в динамических процессах и быстром старте, а одной ежедневной выгрузке без зависимостей хватит и cron.
Где спотыкаются
Не могут назвать ни одного различия по существу и описывают инструмент как «то же самое, только на декораторах». Разговор стоит вести о том, где строится граф, кто хранит состояния и как устроен повтор упавшей задачи.
Вешают повторы на всё подряд, не сделав задачу идемпотентной. Повтор наполовину выполненной загрузки дублирует строки, поэтому сначала ключ дедупликации или запись пачкой в транзакции, и только потом настройка повторов.
Думают, что код выполняется на сервере оркестрации. Выполняет его исполнитель в вашем окружении, туда же нужны зависимости, доступы и секреты, а сервер хранит метаданные запусков. Из-за этой путаницы потом ищут библиотеку не на той машине.