FastAPI - Фоновые задачи с Celery, Redis и Flower #9
Vložit
- čas přidán 25. 07. 2024
- 💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡
Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle (FastAPI): forms.gle/Zw7bPnQvTsfekVH47
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Скачать redis можно здесь: github.com/tporadowski/redis/...
Репозиторий на Github с кодом из видео: t.me/artemshumeiko/9
Мой телеграм-канал: t.me/artemshumeiko
Поддержать канал на Boosty: boosty.to/artemshumeiko
В этом видео мы познакомимся с классным инструментом Celery, научимся выполнять фоновые задачи. Работа с Celery - мастхэв для любого бэкендера. Мы также научимся мониторить выполнение задач через Flower. Установку Redis смотрите в предыдущем уроке.
0:00 - Вступление
0:58 - Зачем нужны фоновые задачи
2:39 - Добавляем SMTP приложение к google аккаунту
3:26 - Установка библиотек Celery и Flower
4:04 - Подключение к Celery через Python
5:01 - Про установку redis
5:45 - Создание задачи Celery
8:41 - Запуск Celery и Flower
11:30 - Обзор Flower
12:15 - Реализация фоновых задач в FastAPI
15:24 - Почему нужно перезапускать Celery при изменении кода
16:25 - Запуск задачи с помощью Celery
19:03 - Сравнение Celery и BackgroundTasks
20:21 - Время поставить лайк и подписаться
#fastapi #python #backend #django #flask #docker #sql #celery #разработка #программирование
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Чисто для интереса спрашиваю, у вас есть коммерческий опыт на FastAPI?
Как раз начал изучение данного фреймворка, видео будут выходить стабильно по графику или по настроению?) Можно затронуть ponyORM, если работали с ней конечно)
Я стараюсь выкладывать видео раз в неделю. Последние 2 месяца почти всегда получалось. Надеюсь, и дальше смогу)
По другим ОРМ видео не планируется
Спасибо за курс! Еще интересно разбиение проекта на микросервисы, вынос функций JWT в отдельный сервис, логирование, работа с документоориентированной бд, напримр MongoDB. Также в перспективе все это развернуть в кубернетис с балансировками нагрузки, разварачивании на кластере и прочим )
@@artemshumeiko Привет. Еще возник вопрос, какими ресурсами кроме документации пользовался при изучении fastapi? Курс идет так просто и понятно, что чувствуется нехватка видео, а они выходят раз в неделю(
Спасибо большое, очень классное видео, было бы круто увидеть все это в docker-compose
Отличный урок! Спасибо большое за твои труды)
Спасибо за интересный и познавательный урок!
Спасибо большое, как всегда все очень понятно и годно!
как всегда очень круто)) В своем приложении буду использовать обязательно, как дойдет до этой части))
Крутой контент и полезный !!
Жду следующих видосов !!
Спасибо! На днях новое видео :)
Артём, спасибо вам большое за классный, интересный, а главное, очень познавательный урок. Я как раз на неделе не прошёл тестовое по теме😅. Теперь буду знать)
Рад, что помог вам
Спасибо вам!
Спасибо за видео
Спасибо большое, что упомянул написать --pool=solo, а то второй день не понимал что не так
Спасибо за видео!!!!
Было бы неплохо сделать урок с beat. К нему больше вопросов.
Не останавливайся, ты супер!
Спасибо ;)
Про --pool=solo годно прям, почему-то до этого вообще не слышал про это, вместо этого запускал при помощи доп. библотеки eventlet или gevent
Очень четкая, грамотная, структурированная информация. Спасибо!
ваще красавчик
17:38 немножко пошалим😂😂😂
суперский урок, спасибо!
суперский контент!)
сколько еще примерно планируешь выпустить роликов и на какие темы?
Привет! Еще планирую 7-8 видео. Темы: вебсокеты, работа с файлами, middleware, соединение с фронтом (CORS), тестирование кода, создание контейнера, деплой и мб что-нибудь еще
Cool content
Спасибо за нужный контент и крутую подачу!)) Есть вопрос в данном уроке в папке tasks все функции get_dashboard_report, send_email_report_dashboard и get_email_template_dashboard по синтаксису не асинхронные. Почему нет? Какие вообще принципы выбора в фастапи - какие таски прописываем асинхронными а какие нет смысла? Хотелось бы вот про это пару слов
good content
Отличное видео. Спасибо за твою работу. Просьба: можешь записать урок как запоковать FastAPI c Celery + ngnix в docker, при этом чтобы реляционная база данных была вне докера? Было бы интересно посмотреть как это правильно разворачивать.
Посмотри в сторону Traefik
спасибо
Спасибо!
Супер что о таких фишках говорят, но рассказано за 20 минут одна страницы документации. Я так понимаю это вводный курс, даже не базовый и наверное автор раскрывает по этапам в более широком разъяснении данные технологии.
как же я долго промудохался с этим всем на винде, с зависшими задачами в состоянии RECEIVED и никогда не выполняющимися, и celery процесс в системе невозможно до конца остановить и куча прочих наслаивающихся траблов.
Пока не наткнулся на это видео и не добавил к запуску воркера --pool=solo. Спасибо Артему.
Никакая гребанная документация об этом не говорит.
А поставить WSL2 религия не позволяет? =)
Спасибо! Видео действительно шикарное. Скажите, можно ли использовать Celery для задачи которая не закрывается пока не выполнено определенное условие. Скажем задача по проверки оплаты. Проверка проходит до тех пор пока приход оплаты не проведен?
Спасибо за видело. Интересно было бы посмотреть как селери на прод ставить, а именно процесс демонизации.
Что такое процесс демонизации?)
@@artemshumeiko например, как правильно запустить селери в systemd, чтобы он работал в фоне
@@artemshumeiko это процесс создания "демона" (daemon) на линукс серваке, чтобы он запускался со всей системой. Любую программу можно завернуть определенными командами и конфигами в этого демона, чтобы он перезапускался со всей системой, если вдруг сервер перезапустился из-за перебоев электричества например или ддос атак. Ещё это делают для того, чтобы запускать его через оч простую команду (типа systemctl start daemon_name), которая бы запускала bash скрипт, то есть пулл готовых команд за тебя
Чувак, спасибо тебе огромное за то что рассказал про этот параметр --pool=solo. Я бошку себе чуть не сломал разгадывая по чему у меня таски в винде создаются но не отрабатывают.
Рад, что помог :) Я сам потратил не один час)
Поставил юбилейный 600 лайк
Спасибо!!
@@artemshumeiko Молодец, контент очень крутой
лайк
А как быть с асинхронными функциями? Почти всё приложение асинхронное, и задачи, соответственно, тоже.
Привет. Для деплоя какой хостинг можешь посоветовать? И каким сам пользуешься? (можешь прислать реф ссылку, хоть так отблагодарю)) У меня проект связан с парсингом авито, и я использую selenium. В основном парсинг на локальном ПК выполняется от часа до 4х, но это на локальном. Хочу что бы запускалось по расписанию...
К сожалению, не могу ничего посоветовать, так как никогда не пользовался :(
Ну, с каждым разом попроще в такие вещи вникать.
Бек для меня совсем новая тема (много лет под ios кнопки красил).
И любопытный момент заметил. По умолчанию safari с куками не дружит. Долго не мог понять почему авторизация не работает. Через chrome/yandex отлично все показывает. В Safari кук просто нет. =)
Safari занял нишу которую раньше занимал ослик - "Самый гавнистый браузер для разработчика".
Там часто компоненты выглядят не так как у всех и что-то работает не так как у всех и поддержка фич тоже самая плохая, при доля рынка в районе 10%. Потому я б не разрабатывал на нем новые фичи для вас, но обязательно тестировал перед релизом если важны яблочные клиенты
интересная библиотека
даже своя панель управления есть
А как можно внутри селери задачи вызвать асинхронный код?
Например, если мы работает с асинхронной алхимией и нам нужно сделать запрос в базу внутри таски?
Или, например, мы шлем нотификаций через внешние сервисы, интеграции с которыми асинхронные (тут, селери нужен, например, из-за приоритетности по очередям и скейла отдельных воркеров, смс уведомлений много - воркер для этой очереди скейлим отдельно)?
Супер. Но почему первый запрос был на 600 мс, а следующие на 20? И будет ли такое же поведение у BackgroundTask?
15:25 это делать надо, когда мы меняем только код самих тасок (функций обернутых в декоратор @task()) для celery ?
Да
помогите кто нибудь
у кого нибудь была проблема с тем что в redis загружаешь 1 задачу а он почему то отправляет потом 20-30 одинаковых задач, у меня в коде даже циклов нет но при этом если на следующий день задачи поставить то он будет ими спамить как придем время выполнения
вот так я добавляю задачу
task = test_request.apply_async(args=[url, start_date_value, user_id], eta=time_tomorrow)
кто-то знает почему flower не видит результаты прошлых тасок при новом запуске? Код не менялся, просто перезапустил flower, но в админ-панели flower - пусто
Как будто половину видео просто вырезали, код который я получил в начале так и не понял зачем нужен, как селери понял вообще что именно на конкретный емаил нужно отправлять письмо, много вопросов
что конкретная функция будет активироваться - отвечает декоратор над этой функцией @celery в примере в видео. при переходе по ../dashboard/ мы активировали функцию отсылания отчёта при помощи .delay(). передали аргументы для исполнения какому (имя) пользователю отсылаем. переменные же для подстановки по email - они уже были в области видимости функции. то есть вызвал бы ты эту функцию через celery или другим способом - она уже знает через какую почту и что отправить. она требует только имя, которое мы подставим в отчете.
@@valor5164 спасибо, но уже год прошел... Я на джангу пересел
Привет Артем. Не знаешь в чем причина: Селери не видит тасок, не регает? У меня на джанге все работало, а на fastapi не хочет.
Привет! Возможные причины: неверно указан адрес файла с тасками при запуске селери, декоратор @app.task забыли или к брокеру не может подключиться
Артем, спасибо за ответ. Я разобрался, была проблема связи в редисом и приложением.
Вджанге адрес был 'redis://redis:6379/0', а в фастапи рабочий 'redis://localhost:6379/0'.
Не знаю почему, но моя задача которая у Вас get_email_template_dashboard - пишет что она не зарегистрирована, хотя в логах её я вижу. Ну и командой celery он её видет, а когда я делаю get запрос, то в логах celery пишет что такска не зарегистрирована
Как думаете Python сильно потеряет в позициях в бекенде с ростом популярности Golang? Есть ли работа на бекенде для связки Python+FastAPI? Я смотрю все больше появляется вакансий где нужен Python+Go, я так понимаю для переписывания сервисов с Python на Go.?
Слишком много всего написано на Python, чтобы в ближайшие 5 лет его сильно сместил Go. Вакансии типа Python+Go мне тоже попадаются, но кажется, там ждут только мидлов и выше, а таких людей не особо много. Да и два языка знать далеко не всем дано, и, в целом, не сильно то и нужно :D
@@artemshumeiko спасибо) А вы как видите свою карьеру в будущем, планируете ближайщие лет 5 оставаться на Python?
Дойду до Сеньора, а дальше посмотрим :) Go, конечно, перспективная штука, но пытаться два языка для бэкенда учить на старте карьеры - это выстрел в ногу
@@artemshumeiko слышал от родственника лида, что достаточно знать 1 язык и быть в нем опытным, а остальные языки уже будут быстро учиться засчет опыта. Дословно не помню, но мысль такова.
В смысле все нормально если картинка котика не придет? Не понял😢
Не Salary а compensation
Ошибка, когда ввожу данные(username, password) на 'auth/login' (macOS)
Сначала думал, что где-то я ошибся, потом сделал clone репы, и всё то же самое
AttributeError: module 'bcrypt' has no attribute '__about__'
version = bcrypt.__about__.__version_
это предупреждение, не ошибка
просто установите последнюю версию passlib
Емае только сейчас дошло что celery это не брокер сообщений а аналог cron, с возможностью детальнее написать метод 🤦♂️
Эти уроки не для новичков, правильно? Объяснение хорошее, понятное, но откуда мне взять localhost:3000, где нажать "Отправить отчет", как проверить, всё ли работает у меня? FastAPI не позволяет писать фронт как django? Я думал это туториал по созданию приложения, а получается просто набор разных уроков по FastAPI. Придется искать новый туториал, возможно вернусь к этим видео, когда стану мидлом.
Из коробки FastAPI не позволяет писать фронт, насколько я знаю. Нужно использовать шаблонизатор, например Jinja.
Это туториал по бекенд разработке, а вы спрашиваете за фронт.
В предыдущих уроках автор показывал, что из коробки есть swagger (127.0.0.1:8000/docs) им и пользуйтесь. Еще есть Postman.
Для изучения и понимания материала, как работает бекенд с отложенными задачами, красивый фронт, который показывает автор, не нужен.
Ну и да, как сказали выше. fastApi это про api-шки к которым отдельно делается SPA на JS
Если чешутся руки быстро изучить фронт, то рекомендую vue.js какой-нибудь видос на 2-3 часа вам будет достаточно чтоб наверстать такую админку. А если подходить серьезно и хотите быть фулстеком то обязательно начинайте с чистого JS, чтоб понять как он устоен и как оно работает, там уже месяцев на 2-3 стоит зависнуть, потом берите хотя бы часов на 8-10 курс по vue или react и возвращайтесь )) Когда изучете фронт, то тут не будет никаких вопросов.
Больше не друзья🥲