FastAPI is a modern Python web framework that makes it easy to build APIs quickly and efficiently. In this tutorial, we will learn how to work with background tasks in FastAPI using Celery, Redis, and Flower.
Background tasks are handy for offloading time-consuming operations from your main application flow. By using a task queue like Celery and a message broker like Redis, we can easily manage and execute background tasks in FastAPI.
Here’s a step-by-step guide on how to set up background tasks in FastAPI using Celery, Redis, and Flower:
Step 1: Install the required packages
First, we need to install the necessary packages. You can install them using pip:
pip install fastapi[all] celery redis flower
Step 2: Create a Celery instance in your FastAPI app
Create a new Python file, such as celery_app.py
, and define a Celery instance there:
from celery import Celery
celery = Celery("tasks", broker="redis://localhost:6379/0")
Step 3: Create a FastAPI app with Celery integration
In your main FastAPI app file, import the Celery instance from celery_app.py
and integrate it:
from fastapi import FastAPI
from celery_app import celery
app = FastAPI()
@app.get("/run-task")
def run_background_task():
task = celery.send_task('tasks.background_task')
return {"task_id": task.id}
Step 4: Define a background task
Create a new Python file, such as tasks.py
, and define a background task there using Celery decorators:
from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def background_task():
# Write your time-consuming task here
return "Background task completed successfully"
Step 5: Run Celery worker
Start a Celery worker to process the background tasks:
celery -A tasks worker --loglevel=info
Step 6: Run FastAPI app with Flower
Run your FastAPI app and start the Flower web interface for monitoring the Celery tasks:
uvicorn main:app --reload
flower -A tasks --port=5555
Now you have successfully set up background tasks in FastAPI using Celery, Redis, and Flower. You can trigger the background task by accessing the /run-task
endpoint in your FastAPI app and monitor the task execution in the Flower web interface.
This setup allows you to offload time-consuming operations to background tasks, making your FastAPI app more efficient and scalable. Have fun building awesome APIs with FastAPI and Celery!
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: https://clck.ru/3B5gwP 💡
Забирай роадмап изучения самого востребованного фреймворка на Python – FastAPI здесь: https://t.me/ArtemShumeikoBot
Скорее к моменту прочтения вопроса уже найду ответ, но суть такая:
Flower видит и воркера, и брокера и письма отправляются, но страница с Тасками в Flower как была пустой, так и осталась
upd: такой кринж словить.. забыть .delay()
Как хорошо что начал учить фастапи именно с этого канала, пробел по большинству вопросов уже закрыл)) Осталось разобраться с отправкой и сохранением файлов)
Привет, отличное видео!
Есть способ запустить celery через redis из docker контейнера.
Просто пропишите эту команду и redis будет работать при помощи docker :
docker run –rm -p 6379:6379 redis:7
Так а что конкретно тут делает redis? Что-то не понял его функционала. Он за что отвечает?
Супер. Но почему первый запрос был на 600 мс, а следующие на 20? И будет ли такое же поведение у BackgroundTask?
Больше не друзья🥲
Спасибо!
интересная библиотека
даже своя панель управления есть
Отличный урок! Спасибо большое за твои труды)
лайк
спасибо
кто-то знает почему flower не видит результаты прошлых тасок при новом запуске? Код не менялся, просто перезапустил flower, но в админ-панели flower – пусто
Супер что о таких фишках говорят, но рассказано за 20 минут одна страницы документации. Я так понимаю это вводный курс, даже не базовый и наверное автор раскрывает по этапам в более широком разъяснении данные технологии.
Ошибка, когда ввожу данные(username, password) на 'auth/login' (macOS)
Сначала думал, что где-то я ошибся, потом сделал clone репы, и всё то же самое
AttributeError: module 'bcrypt' has no attribute '__about__'
version = bcrypt._about__.__version
Спасибо большое, что упомянул написать –pool=solo, а то второй день не понимал что не так
Спасибо за видео
Чувак, спасибо тебе огромное за то что рассказал про этот параметр –pool=solo. Я бошку себе чуть не сломал разгадывая по чему у меня таски в винде создаются но не отрабатывают.
Не знаю почему, но моя задача которая у Вас get_email_template_dashboard – пишет что она не зарегистрирована, хотя в логах её я вижу. Ну и командой celery он её видет, а когда я делаю get запрос, то в логах celery пишет что такска не зарегистрирована
Спасибо за видело. Интересно было бы посмотреть как селери на прод ставить, а именно процесс демонизации.