Отключить отладку Django для сельдерея - PullRequest
13 голосов
/ 26 января 2011

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

Ответы [ 3 ]

32 голосов
/ 26 января 2011

У Celery нет утечки памяти, именно так работает Django:

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

Полагаю, вы могли бы использовать хак, например:

if "celeryd" in sys.argv:
    DEBUG = False
1 голос
/ 17 мая 2019

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

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

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

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

0 голосов
/ 31 июля 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...