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