Как стать автором
Обновить

Комментарии 4

Спасибо за перевод хорошей статьи.
Пара замечаний, дополнений. Думаю стоит сделать пометку что данный проект не предназначен для продакшена. Хотя бы потому что используется dev сервер django. Не знаю зачем автор прописал переменную окружения с secret key прямо в docker-compose.yml, возможно это часть его dev конфига — лучшим местом для этого будет файл .env, который будет прописан в .gitignore.
По самому celery. Уже много раз обсуждалось и везде предупреждают, но повторю — не используйте в качестве аргументов для тасков сложные объекты, например модели django. Передавайте лучше id и уже в таске получайте объект из БД. Ещё один важный момент, который может смутить начинающего разработчика на django — вьюхи, как правило, выполняются в транзакции. Это может привести к тому, сохранив новый объект и сразу отправь его id в таск вы можете получить object not found. Чтобы такого избежать, нужно использовать конструкцию типа
transaction.on_commit(lambda: some_celery_task.delay(obj.id))

docs
Так же можно смотреть текущие задачи и их статусы с помощью
$ celery -A worker events

Очень полезно когда нужно посмотреть задачи прямо сейчас.

Интересный подход, но необычно видеть Celery и Docker вместе.
Возможно я не верно истолковал посыл статьи, но разве не проще было бы использовать много контейнеров с приложениям (consumer/publisher) без Celery? Docker в этом случае мог бы обеспечить перенаправление логов из stdout, ограничения по ресурсам (CPU, RAM, I/O) и масштабирование путем увеличения ядер/квоты CPU, или увеличением количества контейнеров…


Для production на работе пришли к контейнерам с aio-pika поверх облака с контейнерами.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий