Тепер настав час перейти до практики і навчитися встановлювати та налаштовувати 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. Він впорається.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ