是否可以仅为 Django 中的特定应用程序设置 DEBUG=False?启用调试时,Celery 存在已知的内存泄漏。我有一个开发服务器,我希望 Celery 作为服务运行,无需调试,因此它不会泄漏内存,但我希望我的 Django 应用程序的其余部分使用调试,以便在测试时显示错误。
问问题
6269 次
3 回答
34
Celery 没有内存泄漏,这就是 Django 的工作方式:
当启用 DEBUG 时,Django 将每个执行的 SQL 语句附加到django.db.connection.queries
,这将在长时间运行的进程环境中无限增长。
我想你可以使用像这样的黑客:
if "celeryd" in sys.argv:
DEBUG = False
于 2011-01-26T15:32:42.023 回答
5
@asksol 的 hack 并没有为我做,我必须做
if "celery" in sys.argv[0]:
DEBUG = False
因为 sys.argv 类似于['/path/to/celery', 'worker', '-A', 'app']
我使用 python 3.6 和 celery 4
于 2019-05-17T16:36:36.800 回答
1
鉴于 sww314 对该答案的评论,基于 asksol 的答案(https://stackoverflow.com/a/4806384/3009897),指出的方法在 Celery 4.x 中不起作用,可以改为依赖检查模块确定正在访问调试设置的执行堆栈。
出于我的目的,以下更改有效:
if DEBUG and 'celery' in inspect.stack()[-1][1]:
DEBUG = False
这假设最外面的调用框架将在关联的文件路径中包含字符串“celery”。(对 DEBUG 的检查是为了确保如果将其留在生产环境中(应设置 DEBUG = False),则不应进行检查。)
于 2018-07-31T15:06:04.187 回答