JavaRush /Курси /Модуль 4: FastAPI /Встановлення і налаштування Celery у проєктах FastAPI і D...

Встановлення і налаштування 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)

Якщо все працює, ви побачите, що worker 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
}'

І слідкуйте за worker'ом 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. Він впорається.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ