是否可以仅为Django中的特定应用设置DEBUG = False?启用调试时,Celery有一个known memory leak。我有一个开发服务器,我希望Celery作为服务运行,无需调试,因此它不会泄漏内存,但我希望我的Django应用程序的其余部分使用调试,以便在测试时显示错误。
Celery没有内存泄漏,这就是Django的工作方式:
当启用DEBUG时,Django将每个执行的SQL语句附加到django.db.connection.queries
,这将在长时间运行的进程环境中无限制地增长。
我想你可以使用像这样的黑客:
if "celeryd" in sys.argv:
DEBUG = False
根据sww314对该答案的评论来建立asksol的答案(https://stackoverflow.com/a/4806384/3009897),指示的方法在Celery 4.x中不起作用,可以依赖于inspect模块来确定正在访问DEBUG设置的执行堆栈在。
就我的目的而言,以下变更有效:
if DEBUG and 'celery' in inspect.stack()[-1][1]:
DEBUG = False
这假定最外面的调用框架将在关联的文件路径中包含字符串'celery'。 (检查DEBUG是为了确保如果将其保留在生产位置(应设置DEBUG = False),则不应进行检查。)