当前位置: 首页 > 面试题库 >

检测celery是否可用/正在运行

杨凌
2023-03-14
问题内容

我正在使用Celery管理异步任务。但是,有时候,芹菜加工过程会停止,这不会导致任何任务被执行。我希望能够检查芹菜的状态,并确保一切正常,如果我发现任何问题,请向用户显示错误消息。从Celery
Worker文档中看来,我可能可以使用ping或inspect进行此操作,但是ping感觉很笨拙,并且不清楚要使用的检查方式是否确切(如果inspect()。registered()为空?)。

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

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

编辑:它甚至看起来都不像celery 2.3.3上提供了registered()(即使2.1文档列出了它)。也许ping是正确的答案。

编辑:Ping似乎也没有做我想做的事情,因此仍然不确定此处的答案。


问题答案:

这是我一直在使用的代码。
celery.task.control.Inspect.stats()返回一个字典,其中包含有关当前可用工作程序的许多详细信息;如果没有工作程序在运行,则返回None;如果IOError无法连接到消息代理,则引发dict
。我正在使用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


 类似资料:
  • 问题内容: 我想以编程方式确定是否直接从XCode(在模拟器中或在系留设备上)运行iOS应用。我尝试了此处描述的-DDEBUG解决方案,但是当我断开与Xcode的连接并重新运行该应用程序时,它仍然认为它处于调试模式。我认为我正在寻找的是此功能的Swift版本 问题答案: 说明: 您的C代码(以及下面的Swift版本)检查程序是否在 调试器的控制 下运行 , 而不是是否从Xcode运行。一个人可以在

  • 我想检查Quartz作业是否正在运行。我发现它可以使用调度程序。getCurrentlyExecutingJobs()。但是我对此感到困惑,我应该把它放在哪里才能得到结果呢?谢谢

  • 问题内容: 标准方法如下: 在这种情况下,如果跟踪当前进程(例如,使用gdb运行或附加到该进程),则ptrace返回错误。 但这有一个严重的问题:如果调用成功返回,则gdb稍后可能不会附加到它。这是一个问题,因为我没有尝试实现反调试的东西。我的目的是在满足条件(即断言失败)并且gdb正在运行时发出“ int 3”(否则,我会得到SIGTRAP来停止应用程序)。 禁用SIGTRAP并每次发出’int

  • 问题内容: 我正在尝试找到一种方法来检测进程是否在Windows Task Manager for Windows OS和Macintosh Activity Monitor for Mac OS中使用Python运行 有人可以帮我提供代码吗? 问题答案: psutil是一个跨平台的库,可检索有关正在运行的进程和系统利用率的信息。 在现有的Windows Python中,您可以使用和解析以下输出:

  • 问题内容: 我有一个安排计时器的游戏。我有这个CoresManager文件: 我在游戏中使用这个: 如果播放器注销并且服务器重新启动,CoresManager计时器将停止运行。为了使其再次运行,我添加了代码以使其在您再次登录后再次执行startTimer()。但是,由于如果服务器未注销,计时器仍在运行,因此计时器开始运行两次。根据您注销和登录的次数,计时器开始减去2或更多。我认为,如果有代码确定计

  • 问题内容: 如何检查存储过程或查询是否仍在SQL Server中运行? 主意 我曾经想过要在过程开始时在哪里写日志,并在过程结束时将日志删除。 缺陷: 使用过程监控器 我希望能有一个可以合并为一个存储过程的解决方案和/或,作为输入,所以使用SQL Server的界面将无法正常工作跟踪程序或解决方案。 更新#1 用法示例: 该过程应该像 并在运行时(20秒内)返回true,然后在函数失败或系统重新启