Как используется Prefect для автоматизации
Что проверяют
Работали ли вы с Prefect руками или знаете его по лендингу. Следом обычно просят сравнить его с Airflow и объяснить, что именно запускает flow по расписанию: многие уверены, что это делает сам декоратор.
Как отвечать
Prefect это оркестратор, в котором пайплайн пишется обычным Python-кодом. Актуальная ветка третья, и её API заметно отличается от первой версии с with Flow(...). Каркас ответа:
@flowи@task: flow это функция верхнего уровня, task это шаг внутри неё. Управление потоком обычное, сifи циклами, граф строится во время выполнения, а не заранее;- надёжность:
@task(retries=3, retry_delay_seconds=30), таймауты и кеширование результатов по входным данным, чтобы перезапуск не повторял дорогие шаги; - параллелизм:
task.submit()возвращает future,task.map()запускает шаг на каждый элемент, для тяжёлых задач есть интеграции с Dask и Ray; - деплой и расписание:
flow.serve()поднимает долгоживущий процесс с расписанием по cron или интервалу, аflow.deploy()регистрирует деплоймент в work pool, откуда его забирают воркеры, например в Docker или Kubernetes; - сервер и UI: self-hosted
prefect server startили облачная версия. Там история запусков, состояния, логи и автоматизации вроде уведомления при падении; - blocks: настройки и секреты подключений к базам и хранилищам вне кода.
Пример из практики стройте вокруг ETL: забрать данные из API, провалидировать, загрузить в базу, с ретраями на сетевом шаге. Отличие от Airflow формулируйте через модель: Airflow описывает DAG, который планировщик разбирает из файлов, а Prefect исполняет код как есть, поэтому динамические ветки и локальный запуск через python flow.py в нём проще.
Где спотыкаются
Ждут, что расписание сработает само. Без запущенного serve или воркера, опрашивающего work pool, деплоймент по cron не выполнится ни разу.
Передают между задачами большие датафреймы. Результаты держатся в памяти, а при включённой персистентности ещё и сериализуются, поэтому объёмные данные лучше писать в хранилище и передавать путь.
Рассказывают API первой версии, и это сразу выдаёт знакомство по старым статьям.