FastAPI - Фоновые задачи с Celery, Redis и Flower #9

Sdílet
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 #разработка #программирование

Komentáře • 84

  • @artemshumeiko
    @artemshumeiko  Před rokem +11

    💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
    Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot

    • @soldiertoy
      @soldiertoy Před rokem

      Чисто для интереса спрашиваю, у вас есть коммерческий опыт на FastAPI?

    • @user-hn8sf7tb3w
      @user-hn8sf7tb3w Před rokem

      Как раз начал изучение данного фреймворка, видео будут выходить стабильно по графику или по настроению?) Можно затронуть ponyORM, если работали с ней конечно)

    • @artemshumeiko
      @artemshumeiko  Před rokem +2

      Я стараюсь выкладывать видео раз в неделю. Последние 2 месяца почти всегда получалось. Надеюсь, и дальше смогу)
      По другим ОРМ видео не планируется

    • @algorithm13
      @algorithm13 Před rokem

      Спасибо за курс! Еще интересно разбиение проекта на микросервисы, вынос функций JWT в отдельный сервис, логирование, работа с документоориентированной бд, напримр MongoDB. Также в перспективе все это развернуть в кубернетис с балансировками нагрузки, разварачивании на кластере и прочим )

    • @user-hn8sf7tb3w
      @user-hn8sf7tb3w Před rokem +1

      @@artemshumeiko Привет. Еще возник вопрос, какими ресурсами кроме документации пользовался при изучении fastapi? Курс идет так просто и понятно, что чувствуется нехватка видео, а они выходят раз в неделю(

  • @user-kx4mm7zm4w
    @user-kx4mm7zm4w Před 8 měsíci +5

    Спасибо большое, очень классное видео, было бы круто увидеть все это в docker-compose

  • @awesomeex5821
    @awesomeex5821 Před 2 měsíci +1

    Отличный урок! Спасибо большое за твои труды)

  • @user-yk4qq4nt7o
    @user-yk4qq4nt7o Před 11 měsíci

    Спасибо за интересный и познавательный урок!

  • @eugeneyakimenko8843
    @eugeneyakimenko8843 Před rokem

    Спасибо большое, как всегда все очень понятно и годно!

  • @user-nl2mc5le7o
    @user-nl2mc5le7o Před rokem

    как всегда очень круто)) В своем приложении буду использовать обязательно, как дойдет до этой части))

  • @ramilelephant7826
    @ramilelephant7826 Před rokem

    Крутой контент и полезный !!
    Жду следующих видосов !!

    • @artemshumeiko
      @artemshumeiko  Před rokem

      Спасибо! На днях новое видео :)

  • @-Pechorin-
    @-Pechorin- Před 11 měsíci +1

    Артём, спасибо вам большое за классный, интересный, а главное, очень познавательный урок. Я как раз на неделе не прошёл тестовое по теме😅. Теперь буду знать)

  • @soldiertoy
    @soldiertoy Před rokem

    Спасибо вам!

  • @patricross8683
    @patricross8683 Před 5 měsíci

    Спасибо за видео

  • @кударец
    @кударец Před 5 měsíci

    Спасибо большое, что упомянул написать --pool=solo, а то второй день не понимал что не так

  • @RajPolinovsky
    @RajPolinovsky Před 9 měsíci +2

    Спасибо за видео!!!!
    Было бы неплохо сделать урок с beat. К нему больше вопросов.

  • @defend00r
    @defend00r Před rokem

    Не останавливайся, ты супер!

  • @vladvlad3544
    @vladvlad3544 Před rokem +1

    Про --pool=solo годно прям, почему-то до этого вообще не слышал про это, вместо этого запускал при помощи доп. библотеки eventlet или gevent

  • @_garik__
    @_garik__ Před rokem +2

    Очень четкая, грамотная, структурированная информация. Спасибо!

  • @haskelllisp5998
    @haskelllisp5998 Před rokem

    ваще красавчик

  • @griigorievamaria
    @griigorievamaria Před rokem

    17:38 немножко пошалим😂😂😂
    суперский урок, спасибо!

  • @NickTyupin
    @NickTyupin Před rokem +5

    суперский контент!)
    сколько еще примерно планируешь выпустить роликов и на какие темы?

    • @artemshumeiko
      @artemshumeiko  Před rokem +10

      Привет! Еще планирую 7-8 видео. Темы: вебсокеты, работа с файлами, middleware, соединение с фронтом (CORS), тестирование кода, создание контейнера, деплой и мб что-нибудь еще

  • @eggiopain5758
    @eggiopain5758 Před rokem

    Cool content

  • @AnatoliyDekorstyle
    @AnatoliyDekorstyle Před 10 měsíci +4

    Спасибо за нужный контент и крутую подачу!)) Есть вопрос в данном уроке в папке tasks все функции get_dashboard_report, send_email_report_dashboard и get_email_template_dashboard по синтаксису не асинхронные. Почему нет? Какие вообще принципы выбора в фастапи - какие таски прописываем асинхронными а какие нет смысла? Хотелось бы вот про это пару слов

  • @eggiopain5758
    @eggiopain5758 Před rokem

    good content

  • @Alsurnov
    @Alsurnov Před rokem +2

    Отличное видео. Спасибо за твою работу. Просьба: можешь записать урок как запоковать FastAPI c Celery + ngnix в docker, при этом чтобы реляционная база данных была вне докера? Было бы интересно посмотреть как это правильно разворачивать.

    • @Eugene_Ivanov
      @Eugene_Ivanov Před 11 měsíci

      Посмотри в сторону Traefik

  • @gayratsaidakhmedov5451
    @gayratsaidakhmedov5451 Před 3 měsíci

    спасибо

  • @kirillayvazov4813
    @kirillayvazov4813 Před 19 dny

    Спасибо!

  • @Miron_Nicolaevich
    @Miron_Nicolaevich Před 4 měsíci

    Супер что о таких фишках говорят, но рассказано за 20 минут одна страницы документации. Я так понимаю это вводный курс, даже не базовый и наверное автор раскрывает по этапам в более широком разъяснении данные технологии.

  • @yevhenKaskov
    @yevhenKaskov Před 11 měsíci +2

    как же я долго промудохался с этим всем на винде, с зависшими задачами в состоянии RECEIVED и никогда не выполняющимися, и celery процесс в системе невозможно до конца остановить и куча прочих наслаивающихся траблов.
    Пока не наткнулся на это видео и не добавил к запуску воркера --pool=solo. Спасибо Артему.
    Никакая гребанная документация об этом не говорит.

    • @evalinor
      @evalinor Před 8 měsíci

      А поставить WSL2 религия не позволяет? =)

  • @rajpolinovsky8350
    @rajpolinovsky8350 Před rokem

    Спасибо! Видео действительно шикарное. Скажите, можно ли использовать Celery для задачи которая не закрывается пока не выполнено определенное условие. Скажем задача по проверки оплаты. Проверка проходит до тех пор пока приход оплаты не проведен?

  • @ренанв
    @ренанв Před 7 měsíci

    Спасибо за видело. Интересно было бы посмотреть как селери на прод ставить, а именно процесс демонизации.

    • @artemshumeiko
      @artemshumeiko  Před 7 měsíci

      Что такое процесс демонизации?)

    • @ренанв
      @ренанв Před 7 měsíci

      @@artemshumeiko например, как правильно запустить селери в systemd, чтобы он работал в фоне

    • @valor5164
      @valor5164 Před 2 měsíci

      @@artemshumeiko это процесс создания "демона" (daemon) на линукс серваке, чтобы он запускался со всей системой. Любую программу можно завернуть определенными командами и конфигами в этого демона, чтобы он перезапускался со всей системой, если вдруг сервер перезапустился из-за перебоев электричества например или ддос атак. Ещё это делают для того, чтобы запускать его через оч простую команду (типа systemctl start daemon_name), которая бы запускала bash скрипт, то есть пулл готовых команд за тебя

  • @akimovvadim4736
    @akimovvadim4736 Před 6 měsíci +1

    Чувак, спасибо тебе огромное за то что рассказал про этот параметр --pool=solo. Я бошку себе чуть не сломал разгадывая по чему у меня таски в винде создаются но не отрабатывают.

    • @artemshumeiko
      @artemshumeiko  Před 6 měsíci

      Рад, что помог :) Я сам потратил не один час)

  • @user-sm6ej3fl4m
    @user-sm6ej3fl4m Před 9 měsíci

    Поставил юбилейный 600 лайк

    • @artemshumeiko
      @artemshumeiko  Před 9 měsíci

      Спасибо!!

    • @user-sm6ej3fl4m
      @user-sm6ej3fl4m Před 9 měsíci

      @@artemshumeiko Молодец, контент очень крутой

  • @drillmaker5455
    @drillmaker5455 Před 3 měsíci

    лайк

  • @RyAndrey
    @RyAndrey Před rokem +2

    А как быть с асинхронными функциями? Почти всё приложение асинхронное, и задачи, соответственно, тоже.

  • @dreammanor_ru
    @dreammanor_ru Před rokem

    Привет. Для деплоя какой хостинг можешь посоветовать? И каким сам пользуешься? (можешь прислать реф ссылку, хоть так отблагодарю)) У меня проект связан с парсингом авито, и я использую selenium. В основном парсинг на локальном ПК выполняется от часа до 4х, но это на локальном. Хочу что бы запускалось по расписанию...

    • @artemshumeiko
      @artemshumeiko  Před rokem +1

      К сожалению, не могу ничего посоветовать, так как никогда не пользовался :(

  • @AndreyTorlopov
    @AndreyTorlopov Před 10 měsíci

    Ну, с каждым разом попроще в такие вещи вникать.
    Бек для меня совсем новая тема (много лет под ios кнопки красил).
    И любопытный момент заметил. По умолчанию safari с куками не дружит. Долго не мог понять почему авторизация не работает. Через chrome/yandex отлично все показывает. В Safari кук просто нет. =)

    • @YmNIKYm
      @YmNIKYm Před 9 měsíci

      Safari занял нишу которую раньше занимал ослик - "Самый гавнистый браузер для разработчика".
      Там часто компоненты выглядят не так как у всех и что-то работает не так как у всех и поддержка фич тоже самая плохая, при доля рынка в районе 10%. Потому я б не разрабатывал на нем новые фичи для вас, но обязательно тестировал перед релизом если важны яблочные клиенты

  • @warflow
    @warflow Před měsícem

    интересная библиотека
    даже своя панель управления есть

  • @nateriver8261
    @nateriver8261 Před 7 měsíci

    А как можно внутри селери задачи вызвать асинхронный код?
    Например, если мы работает с асинхронной алхимией и нам нужно сделать запрос в базу внутри таски?
    Или, например, мы шлем нотификаций через внешние сервисы, интеграции с которыми асинхронные (тут, селери нужен, например, из-за приоритетности по очередям и скейла отдельных воркеров, смс уведомлений много - воркер для этой очереди скейлим отдельно)?

  • @megalun_
    @megalun_ Před 2 dny

    Супер. Но почему первый запрос был на 600 мс, а следующие на 20? И будет ли такое же поведение у BackgroundTask?

  • @sashass099
    @sashass099 Před rokem

    15:25 это делать надо, когда мы меняем только код самих тасок (функций обернутых в декоратор @task()) для celery ?

  • @RunBull
    @RunBull Před 9 měsíci

    помогите кто нибудь
    у кого нибудь была проблема с тем что в redis загружаешь 1 задачу а он почему то отправляет потом 20-30 одинаковых задач, у меня в коде даже циклов нет но при этом если на следующий день задачи поставить то он будет ими спамить как придем время выполнения
    вот так я добавляю задачу
    task = test_request.apply_async(args=[url, start_date_value, user_id], eta=time_tomorrow)

  • @berzerkmatters8003
    @berzerkmatters8003 Před 4 měsíci

    кто-то знает почему flower не видит результаты прошлых тасок при новом запуске? Код не менялся, просто перезапустил flower, но в админ-панели flower - пусто

  • @lovi3410
    @lovi3410 Před rokem +3

    Как будто половину видео просто вырезали, код который я получил в начале так и не понял зачем нужен, как селери понял вообще что именно на конкретный емаил нужно отправлять письмо, много вопросов

    • @valor5164
      @valor5164 Před 2 měsíci

      что конкретная функция будет активироваться - отвечает декоратор над этой функцией @celery в примере в видео. при переходе по ../dashboard/ мы активировали функцию отсылания отчёта при помощи .delay(). передали аргументы для исполнения какому (имя) пользователю отсылаем. переменные же для подстановки по email - они уже были в области видимости функции. то есть вызвал бы ты эту функцию через celery или другим способом - она уже знает через какую почту и что отправить. она требует только имя, которое мы подставим в отчете.

    • @lovi3410
      @lovi3410 Před 2 měsíci

      @@valor5164 спасибо, но уже год прошел... Я на джангу пересел

  • @vadim7634
    @vadim7634 Před rokem

    Привет Артем. Не знаешь в чем причина: Селери не видит тасок, не регает? У меня на джанге все работало, а на fastapi не хочет.

    • @artemshumeiko
      @artemshumeiko  Před rokem

      Привет! Возможные причины: неверно указан адрес файла с тасками при запуске селери, декоратор @app.task забыли или к брокеру не может подключиться

    • @vadim7634
      @vadim7634 Před rokem +1

      Артем, спасибо за ответ. Я разобрался, была проблема связи в редисом и приложением.
      Вджанге адрес был 'redis://redis:6379/0', а в фастапи рабочий 'redis://localhost:6379/0'.

  • @chatgpktest123
    @chatgpktest123 Před 6 měsíci

    Не знаю почему, но моя задача которая у Вас get_email_template_dashboard - пишет что она не зарегистрирована, хотя в логах её я вижу. Ну и командой celery он её видет, а когда я делаю get запрос, то в логах celery пишет что такска не зарегистрирована

  • @Artem-wk1vn
    @Artem-wk1vn Před rokem

    Как думаете Python сильно потеряет в позициях в бекенде с ростом популярности Golang? Есть ли работа на бекенде для связки Python+FastAPI? Я смотрю все больше появляется вакансий где нужен Python+Go, я так понимаю для переписывания сервисов с Python на Go.?

    • @artemshumeiko
      @artemshumeiko  Před rokem +1

      Слишком много всего написано на Python, чтобы в ближайшие 5 лет его сильно сместил Go. Вакансии типа Python+Go мне тоже попадаются, но кажется, там ждут только мидлов и выше, а таких людей не особо много. Да и два языка знать далеко не всем дано, и, в целом, не сильно то и нужно :D

    • @Artem-wk1vn
      @Artem-wk1vn Před rokem

      @@artemshumeiko спасибо) А вы как видите свою карьеру в будущем, планируете ближайщие лет 5 оставаться на Python?

    • @artemshumeiko
      @artemshumeiko  Před rokem +4

      Дойду до Сеньора, а дальше посмотрим :) Go, конечно, перспективная штука, но пытаться два языка для бэкенда учить на старте карьеры - это выстрел в ногу

    • @vladvlad3544
      @vladvlad3544 Před rokem +1

      @@artemshumeiko слышал от родственника лида, что достаточно знать 1 язык и быть в нем опытным, а остальные языки уже будут быстро учиться засчет опыта. Дословно не помню, но мысль такова.

  • @umni_kot
    @umni_kot Před rokem +9

    В смысле все нормально если картинка котика не придет? Не понял😢

  • @user-rj3nb6gs5h
    @user-rj3nb6gs5h Před rokem +1

    Не Salary а compensation

  • @busipac1467
    @busipac1467 Před 4 měsíci

    Ошибка, когда ввожу данные(username, password) на 'auth/login' (macOS)
    Сначала думал, что где-то я ошибся, потом сделал clone репы, и всё то же самое
    AttributeError: module 'bcrypt' has no attribute '__about__'
    version = bcrypt.__about__.__version_

    • @artemshumeiko
      @artemshumeiko  Před 4 měsíci

      это предупреждение, не ошибка
      просто установите последнюю версию passlib

  • @romanbush5164
    @romanbush5164 Před rokem +2

    Емае только сейчас дошло что celery это не брокер сообщений а аналог cron, с возможностью детальнее написать метод 🤦‍♂️

  • @artem_raudsep
    @artem_raudsep Před rokem

    Эти уроки не для новичков, правильно? Объяснение хорошее, понятное, но откуда мне взять localhost:3000, где нажать "Отправить отчет", как проверить, всё ли работает у меня? FastAPI не позволяет писать фронт как django? Я думал это туториал по созданию приложения, а получается просто набор разных уроков по FastAPI. Придется искать новый туториал, возможно вернусь к этим видео, когда стану мидлом.

    • @vladvlad3544
      @vladvlad3544 Před rokem

      Из коробки FastAPI не позволяет писать фронт, насколько я знаю. Нужно использовать шаблонизатор, например Jinja.

    • @YmNIKYm
      @YmNIKYm Před 9 měsíci

      Это туториал по бекенд разработке, а вы спрашиваете за фронт.
      В предыдущих уроках автор показывал, что из коробки есть swagger (127.0.0.1:8000/docs) им и пользуйтесь. Еще есть Postman.
      Для изучения и понимания материала, как работает бекенд с отложенными задачами, красивый фронт, который показывает автор, не нужен.
      Ну и да, как сказали выше. fastApi это про api-шки к которым отдельно делается SPA на JS
      Если чешутся руки быстро изучить фронт, то рекомендую vue.js какой-нибудь видос на 2-3 часа вам будет достаточно чтоб наверстать такую админку. А если подходить серьезно и хотите быть фулстеком то обязательно начинайте с чистого JS, чтоб понять как он устоен и как оно работает, там уже месяцев на 2-3 стоит зависнуть, потом берите хотя бы часов на 8-10 курс по vue или react и возвращайтесь )) Когда изучете фронт, то тут не будет никаких вопросов.

  • @dubrovvin5892
    @dubrovvin5892 Před 10 dny

    Больше не друзья🥲