禁用Celery的Django调试

问题描述 投票:12回答:2

是否可以仅为Django中的特定应用设置DEBUG = False?启用调试时,Celery有一个known memory leak。我有一个开发服务器,我希望Celery作为服务运行,无需调试,因此它不会泄漏内存,但我希望我的Django应用程序的其余部分使用调试,以便在测试时显示错误。

python django celery
2个回答
31
投票

Celery没有内存泄漏,这就是Django的工作方式:

当启用DEBUG时,Django将每个执行的SQL语句附加到django.db.connection.queries,这将在长时间运行的进程环境中无限制地增长。

我想你可以使用像这样的黑客:

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

1
投票

根据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),则不应进行检查。)

© www.soinside.com 2019 - 2024. All rights reserved.