【发布时间】:2014-05-17 23:30:01
【问题描述】:
我正在使用 Celery 和 Django 进行在线游戏。
我已经编写了中间件来检查 Celery 是否可用和运行,基于这个答案:Detect whether Celery is Available/Running
我的代码实际上是这样的:
from celery.task.control import inspect
class CeleryCheckMiddleware(object):
def process_request(self, request):
insp = inspect().stats()
if not insp:
return render(...)
else:
return None
但我忘记了该答案底部评论中的警告,“我发现上面每次运行时都会向rabbitmq 添加两个reply.celery.pidbox 队列。这会导致rabbitmq 的内存使用量逐渐增加。'
我现在(仅一天后!)注意到从 insp = inspect().stats() 行开始到 OSError: [Errno 4] Interrupted system call 终止的偶尔出现 500 错误。
有没有一种内存安全的方法来检查 Celery 是否可用并正在运行?
【问题讨论】:
-
您找到解决方案了吗?有没有办法刷新以前调用使用的内存?
-
@TimTisdall 不是我发现的。我坚持在更新时将网站置于维护模式,因此不会接受新任务。
-
也许中间件会起作用...让中间件只在更新时进行检查,否则停止检查。但是,如果您是控制
celery何时关闭的人,则手动将维护屏幕打开更有意义。 -
@TimTisdall 我手动重新启动 celery 以便它可以知道任何更新的任务代码。
标签: python django celery django-celery