Подтвердить что ты не робот

Отключить отладку Django для сельдерея

Можно ли установить DEBUG = False только для конкретного приложения в Django? У сельдерея есть известная утечка памяти, когда включена отладка. У меня есть сервер разработки, где я хочу, чтобы Celery запускался как служба, без отладки, поэтому он не пропускает память, но я хочу, чтобы остальная часть моего приложения Django использовала отладку, поэтому при тестировании будут отображаться ошибки.

4b9b3361

Ответ 1

Сельдерей не имеет утечки памяти, как работает Django:

Когда DEBUG включен, Django добавляет каждый выполненный SQL-оператор к django.db.connection.queries, это будет неограниченно расти в продолжительной рабочей среде.

Я думаю, вы могли бы использовать взломать как:

if "celeryd" in sys.argv:
    DEBUG = False

Ответ 2

Построение ответа asksol (fooobar.com/questions/429193/...) в свете комментария к этому ответу sww314 о том, что указанный метод не работает в Celery 4.x, вместо этого можно полагаться на модуль проверки определить стек выполнения, к которому осуществляется доступ к параметру DEBUG.

Для моих целей сработало следующее изменение:

if DEBUG and 'celery' in inspect.stack()[-1][1]:
    DEBUG = False

Это предполагает, что самый внешний фрейм вызова будет содержать строку "сельдерей" в связанном пути к файлу. (Проверка на DEBUG является гарантией того, что, если это останется на месте для производства (где DEBUG = False должно быть установлено), проверка не должна проводиться.)

Ответ 3

Взлом от @asksol не сделал это для меня, я должен был сделать

if "celery" in sys.argv[0]:
    DEBUG = False

Потому что sys.argv - это что-то вроде ['/path/to/celery', 'worker', '-A', 'app']

Я использую Python 3.6 и сельдерея 4