Отдельные очереди Celery для разных окружений

Что нужно делать, если на одном сервере крутятся разные окружения одного и того же проекта и требуется отправлять задачи из этих проектов в соответствующие очереди.

Ситуация: на одном сервере крутятся несколько окружений одного и того же проекта (development, staging, production).

Проблема: задачи из dev окружения обрабатывались production-воркером.

Решение:

В конфиге проекта указывать название очереди исходя из названия проекта/площадки.
Для идентификации площадки/окружения я использую переменную PROJECT_NAME, которая берется из переменных окружения:

PROJECT_NAME = os.environ.get('PROJECT_NAME')

Эту переменную я использую для задания названия очереди celery.

CELERY_DEFAULT_QUEUE = PROJECT_NAME + '_default'
CELERY_QUEUES = (
    Queue(PROJECT_NAME + '_default', Exchange(PROJECT_NAME + '_default'), routing_key=PROJECT_NAME + '_default'),
)

Documentation: http://docs.celeryproject.org/en/latest/userguide/routing.html#changing-the-name-of-the-default-queue

Опубликовано: 30 августа 2016 г.

Simple is better than complex.

PEP20: The Zen of Python