Django: Как игнорировать задания с сельдереем? - PullRequest
0 голосов
/ 22 февраля 2020

Без изменения самого кода, есть ли способ игнорировать задачи в Celery?

Например, при использовании Django почты, есть настройка Dummy Backend . Это идеально, так как позволяет мне из файла .env деактивировать отправку почты в некоторых средах (таких как тестирование или подготовка). Сам код, который обрабатывает отправку почты, не изменяется с помощью if операторов или декораторов.

Для задач сельдерея я знаю, что я мог бы сделать это в коде, используя макеты или декораторы, но я бы хотел сделать это в чистый способ, который соответствует 12 факторам, как с Django письмами. Любая идея?

РЕДАКТИРОВАТЬ, чтобы объяснить, почему я хочу сделать это:

Одной из основных причин этого является то, что он создает связь между Django веб-сервером и задачами Celery. Например, при запуске модульных тестов, если сервер-посредник (для меня Redis) не запущен, то если вызывается метод delay(), он останавливается навсегда, потому что нет никакого тайм-аута, когда Celery пытается отправить задачу в Redis. С точки зрения архитектуры это очень плохо. Я бы хотел, чтобы мои юнит-тесты могли работать без необходимости запуска брокера из Celery!

Спасибо!

1 Ответ

1 голос
/ 22 февраля 2020

Что касается связи, ваше приложение Django будет по-прежнему привязано к сельдерею, если вы используете фиктивный бэкэнд. Просто ваши задачи не будут выполнены. Может быть, это приемлемо в вашем случае, но, на мой взгляд, это может вызвать некоторые проблемы. Например, если фрагмент кода, который вы пытаетесь протестировать, отправляет задачу сельдерею, а в более поздней части пытается получить результат для этой задачи, он потерпит неудачу. Поскольку фиктивный сервер никогда не выполнит задачу.

Для модульного тестирования, как вы упомянули в своем вопросе, вы можете использовать настройку task_always_eager . Если вы включите его, ваше Django приложение больше не будет зависеть от работающего работника. Он будет выполнять задачи в одном потоке синхронно и вернет результат.

...