@dimonkoz

Что за магия в работе Celery с использованием Docker?

Проект с двумя сервисами на django и flask добрался до момента, что некоторые запросы требует страта запуска тяжелых асинхронных задач. Раньше уже использовал Celery+Django с брокером Redis в небольшом проекте для работы таска по расписанию. Но...
Не могу понять как это работает внутри Docker-контейнеров
Допустим есть 3 контейнера:
- django_web
- redis
- celery_worker
django_web и celery_worker используют redis как брокер. Таски определены в контейнере django_web
Вопрос: Каким образом Celery-воркер в celery_worker-контейнере выполняет такс? У контейнера с воркером нет доступа к функции и операциям. Неужели все содержимое такса каким-то образом передается через брокер и ему неважно, где располагается код? Или передается только имя+сигнатура.
Не могу найти практику как правильно использовать Celery в контейнерах
  • Вопрос задан
  • 711 просмотров
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Воу-воу, сам на днях буду переносить celery в docker.
Но ваш вопрос немного не о том. Он скорее о понимании, как вообще работает celery.

Неужели все содержимое такса каким-то образом передается через брокер и ему неважно, где располагается код? Или передается только имя+сигнатура.

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

Возьмём Django + Celery.
Типичный, описанный в документации и используемым самим celery для интеграции с django, шаблон использования таков: вы создаёте в django-приложениях файл tasks.py, в котором создаются функции, декорируемые @task. В этих функциях вы описываете логику этих заданий.

В таком случае, веб-приложение и воркеры используют один и тот же код. И в контейнеры django_web и celery_worker надо упаковывать одно и то же. Просто запускаться это будет по разным сценариям: django_web будет обрабатывать http-запросы, celery_worker будет обрабатывать поступающие задания.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Я тут недавно сделал задачи на RQ - очень все просто и комфортно, правда многого нет, того что в celery, но оно мне и не нужно. - python-rq.org
Рекомендую, если есть вопросы - задавайте.
И да, а в чем проблема с докером? Передаются имя метода и параметры, так как все воркеры имеют доступ к тому же самому коду, что и паблишер, то воркер спокойно вызывает нужный метод с нужными аргументами, только позаботьтесь о внешних ресурсах типа коннекта к базе, перед вызовом воркер-инстанса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы