JavaRush /Курсы /Модуль 4: FastAPI /Установка и настройка Celery в проектах FastAPI и Django

Установка и настройка Celery в проектах FastAPI и Django

Модуль 4: FastAPI
13 уровень , 1 лекция
Открыта

Теперь настало время перейти к практике и научиться устанавливать и настраивать Celery в реальных проектах.

В этой лекции мы создадим базовое окружение для работы с Celery в двух популярных фреймворках: FastAPI и Django.

Пристегните ремни — будет интересно!

На случай, если вы вдруг задаётесь вопросом: "А зачем мне этот Celery?" — представьте себе ситуацию:

ваше веб-приложение должно отправить 1000 email-уведомлений. Если пытаться сделать это синхронно, сервер будет заблокирован до тех пор,

пока все письма не улетят. Результат — страдающие пользователи и обеспокоенный админ.

Celery позволяет передать эту «головную боль» фоновому процессу. Более того, он отлично справляется с распределением задач между несколькими серверами.

Красота, правда?


Установка Celery и дополнительных библиотек

Начнём с установки пакета Celery. Это настолько просто, что можно сделать одной строкой:

pip install celery

Celery нуждается в брокере сообщений. Мы будем использовать Redis — быстро, просто, удобно:

pip install redis

Если вы предпочитаете RabbitMQ (мы с ним тоже знакомились), можете использовать его — Celery умеет работать с разными брокерами. Но для начала Redis проще.


Настройка Celery в Django

Начнём с классики жанра — Django. Интеграция выглядит так:

В корневой папке проекта (где settings.py), создайте файл celery.py:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

Устанавливаем настройки по умолчанию:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')
app = Celery('your_project_name')

Читаем конфигурацию из settings.py:

app.config_from_object('django.conf:settings', namespace='CELERY')

Автоматический поиск задач в приложениях:

app.autodiscover_tasks()

В каждом Django-приложении добавьте файл tasks.py:

from celery import shared_task

@shared_task
def add(x, y):
    return x + y

В settings.py добавьте настройки Celery:

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

Запуск Celery:

celery -A your_project_name worker --loglevel=info

Настройка Celery в FastAPI

Теперь перейдём к FastAPI — модному, быстрому и асинхронному.

Шаг 1: создаем celery_app.py

celery_app.py

from celery import Celery

celery_app = Celery(
    "my_fastapi_project",
    broker="redis://localhost:6379/0",
    backend="redis://localhost:6379/0",
)

@celery_app.task
def send_email(recipient: str, subject: str, body: str):
    print(f"Отправляем письмо на {recipient} с темой '{subject}' и телом:\n{body}")

Шаг 2: вызываем задачу из FastAPI

main.py

from fastapi import FastAPI
from celery_app import send_email

app = FastAPI()

@app.post("/send/")
async def send(recipient: str, subject: str, body: str):
    send_email.delay(recipient, subject, body)
    return {"status": "Задача отправлена!"}

Шаг 3: запуск Celery

celery -A celery_app.celery_app worker --loglevel=info

Обратите внимание: celery_app — это имя Python-модуля (файла без .py), а .celery_app — объект внутри него.


Тестирование и отладка

Теперь, когда мы всё настроили, пришло время протестировать наши приложения.

В Django задачи можно вызывать напрямую через Django Shell:

python manage.py shell

И из консоли:

from your_app.tasks import add
add.delay(4, 6)

Если всё работает, вы увидите, что воркер Celery обработал задачу.

А теперь сделаем проверку в FastAPI.

Просто отправьте POST запрос через любой инструмент (например, Postman или curl):

curl -X 'POST' \
  'http://127.0.0.1:8000/multiply/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "x": 5,
  "y": 3
}'

И наблюдайте за воркером Celery.


Типичные ошибки при настройке

  • Redis не запущен.
    Если ваш Redis-сервер не запущен, Celery выдаст ошибку подключения. Убедитесь, что Redis работает:
    redis-server
    
  • Неправильный путь модуля.
    Указанный в -A путь модуля должен быть корректным. Если ваш проект называется my_project, формат будет my_project.celery.
  • Конфликт портов.
    Если Redis использует другой порт, обновите CELERY_BROKER_URL и broker в настройках.

Вывод

Теперь вы знаете, как подключить Celery к Django и FastAPI, не потеряв здравый смысл.

Celery берёт на себя все фоновые и тяжёлые задачи, давая вашему приложению вздохнуть свободно.

В следующих лекциях мы будем углубляться в продвинутые возможности Celery, такие как планирование задач с Celery Beat.

А пока — не бойтесь делегировать работу Celery. Он справится.

1
Задача
Модуль 4: FastAPI, 13 уровень, 1 лекция
Недоступна
Установка и тест Celery в Django
Установка и тест Celery в Django
1
Задача
Модуль 4: FastAPI, 13 уровень, 1 лекция
Недоступна
Интеграция Celery с FastAPI
Интеграция Celery с FastAPI
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ