gpt4 book ai didi

python - 检测 Celery 是否可用/正在运行

转载 作者:IT老高 更新时间:2023-10-28 20:36:40 28 4
gpt4 key购买 nike

我正在使用 Celery管理异步任务。然而,偶尔,celery 进程会停止,这会导致没有任何任务被执行。我希望能够检查 celery 的状态并确保一切正常,如果我检测到任何问题,则会向用户显示错误消息。从 Celery Worker 文档看来,我可以使用 pinginspect为此,但是 ping 感觉很笨拙,并且不清楚究竟是如何使用 inspect 的(如果 inspect().registered() 是空的?)。

对此的任何指导将不胜感激。基本上我正在寻找的是这样的方法:

def celery_is_alive():
from celery.task.control import inspect
return bool(inspect().registered()) # is this right??

编辑:在 celery 2.3.3 上甚至没有注册()可用(即使 2.1 文档列出了它)。也许 ping 是正确的答案。

编辑:Ping 似乎也没有像我想象的那样做,所以仍然不确定这里的答案。

最佳答案

这是我一直在使用的代码。 celery.task.control.Inspect.stats() 返回一个 dict,其中包含有关当前可用工作人员的大量详细信息,如果没有工作人员正在运行,则返回 None,或者引发 IOError如果它无法连接到消息代理。我正在使用 RabbitMQ - 其他消息传递系统的行为可能略有不同。这在 Celery 2.3.x 和 2.4.x 中有效;我不确定它有多远。

def get_celery_worker_status():
ERROR_KEY = "ERROR"
try:
from celery.task.control import inspect
insp = inspect()
d = insp.stats()
if not d:
d = { ERROR_KEY: 'No running Celery workers were found.' }
except IOError as e:
from errno import errorcode
msg = "Error connecting to the backend: " + str(e)
if len(e.args) > 0 and errorcode.get(e.args[0]) == 'ECONNREFUSED':
msg += ' Check that the RabbitMQ server is running.'
d = { ERROR_KEY: msg }
except ImportError as e:
d = { ERROR_KEY: str(e)}
return d

关于python - 检测 Celery 是否可用/正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506914/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com