- Добавлена конфигурация Celery (eusrr_backend/celery.py) - Созданы async задачи для уведомлений (notifications/tasks.py) - Обновлены все notification_signals на create_notification_async() - Добавлен метод NotificationService.create_notification_async() с fallback - Установлены пакеты: django-celery-beat, django-celery-results, flower - Применены миграции для Celery приложений - Документация: CELERY_SETUP.md, CELERY_INTEGRATION_PLAN.md Производительность: уменьшение времени отправки сообщений с ~500ms до <50ms
6.5 KiB
6.5 KiB
Инструкция по запуску Celery (Development)
📋 Предварительные требования
1. Установка Redis
Windows:
# Через WSL2
wsl --install
wsl
sudo apt update
sudo apt install redis-server
redis-server --daemonize yes
# Или скачать с https://github.com/microsoftarchive/redis/releases
Linux/Mac:
# Ubuntu/Debian
sudo apt install redis-server
sudo systemctl start redis
# MacOS
brew install redis
brew services start redis
Docker (рекомендуется):
docker run -d -p 6379:6379 --name redis redis:7-alpine
2. Проверка Redis
redis-cli ping
# Должно вернуть: PONG
🚀 Установка зависимостей
# Активировать виртуальное окружение
.venv/Scripts/activate # Windows
source .venv/bin/activate # Linux/Mac
# Установить новые пакеты
cd backend
pip install -r requirements.txt
Новые пакеты:
redis- клиент для Redisdjango-celery-beat- периодические задачиdjango-celery-results- хранение результатовflower- веб-интерфейс мониторинга
🔧 Настройка окружения
1. Добавить в .env:
# Redis & Celery
REDIS_HOST=localhost
REDIS_PORT=6379
CELERY_BROKER_URL=redis://localhost:6379/0
CELERY_RESULT_BACKEND=redis://localhost:6379/1
2. Применить миграции (для django-celery-beat):
python manage.py migrate django_celery_beat
python manage.py migrate django_celery_results
🏃 Запуск Celery Worker
Вариант 1: Базовый запуск
cd backend
celery -A eusrr_backend worker -l info
Вариант 2: С указанием очередей
celery -A eusrr_backend worker -l info -Q default,notifications,emails
Вариант 3: С autoscale (для production)
celery -A eusrr_backend worker -l info --autoscale=10,3
# 10 = максимум workers, 3 = минимум workers
🕐 Запуск Celery Beat (периодические задачи)
Отдельное окно терминала:
cd backend
celery -A eusrr_backend beat -l info
🌺 Запуск Flower (мониторинг)
Отдельное окно терминала:
cd backend
celery -A eusrr_backend flower --port=5555
Откройте в браузере: http://localhost:5555
🧪 Тестирование
1. Проверка подключения
cd backend
python manage.py shell
from eusrr_backend.celery import debug_task
result = debug_task.delay()
print(f"Task ID: {result.id}")
print(f"Status: {result.status}")
2. Проверка через Django admin
- Перейти в админку: http://localhost:8000/admin/
- Найти раздел "Periodic Tasks" (от django-celery-beat)
- Создать тестовую задачу
📊 Мониторинг
Через Flower (рекомендуется)
- URL: http://localhost:5555
- Видны: активные задачи, история, графики
Через Redis CLI
redis-cli
> KEYS *celery*
> LLEN celery
> LRANGE celery 0 10
Через Django shell
from django_celery_results.models import TaskResult
TaskResult.objects.all()
🛑 Остановка
# Ctrl+C в каждом окне терминала (worker, beat, flower)
# Или через pkill (Linux/Mac)
pkill -f "celery worker"
pkill -f "celery beat"
pkill -f "celery flower"
Остановка Redis
# Docker
docker stop redis
# Systemd
sudo systemctl stop redis
# WSL
redis-cli shutdown
🐛 Отладка проблем
Проблема: Worker не запускается
Решение:
- Проверьте Redis:
redis-cli ping - Проверьте
.envфайл - Убедитесь что виртуальное окружение активно
- Проверьте логи:
celery -A eusrr_backend worker -l debug
Проблема: Задачи не выполняются
Решение:
- Проверьте очереди:
redis-cli LLEN celery - Проверьте Flower: http://localhost:5555
- Проверьте worker logs
- Убедитесь что worker запущен с нужной очередью
Проблема: Redis connection refused
Решение:
- Убедитесь что Redis запущен
- Проверьте порт:
netstat -an | grep 6379 - Проверьте CELERY_BROKER_URL в .env
📝 Полезные команды
Celery
# Очистить очередь
celery -A eusrr_backend purge
# Инспекция workers
celery -A eusrr_backend inspect active
celery -A eusrr_backend inspect stats
# Список зарегистрированных задач
celery -A eusrr_backend inspect registered
Redis
# Очистить все данные Celery
redis-cli KEYS "celery*" | xargs redis-cli DEL
# Мониторинг в реальном времени
redis-cli MONITOR
🔄 Development workflow
Типичный процесс работы:
Терминал 1: Django
.venv/Scripts/python manage.py runserver
Терминал 2: Celery Worker
celery -A eusrr_backend worker -l info
Терминал 3: Celery Beat (если нужны периодические задачи)
celery -A eusrr_backend beat -l info
Терминал 4: Flower (опционально)
celery -A eusrr_backend flower
Терминал 5: Redis (если запускали вручную)
redis-server
🎯 Следующие шаги
После успешного запуска:
- ✅ Создать первую задачу в
notifications/tasks.py - ✅ Протестировать отправку уведомления через Celery
- ✅ Измерить улучшение производительности
- ✅ Настроить периодические задачи
- ✅ Настроить мониторинг в production
📚 Документация
- Celery: https://docs.celeryq.dev/
- Flower: https://flower.readthedocs.io/
- Django Celery Beat: https://django-celery-beat.readthedocs.io/
- Redis: https://redis.io/docs/