Celery / Django - 如何以编程方式查看工人的状态

Posted

技术标签:

【中文标题】Celery / Django - 如何以编程方式查看工人的状态【英文标题】:Celery / Django - How to programatically see workers' states 【发布时间】:2016-07-15 20:08:52 【问题描述】:

我刚刚安装了 Celery,我想创建一个简单的状态页面,显示当前的工人数量和他们的状态。

这可能吗?从网络搜索中我找到的最好的是celery.current_app.control.inspect()

但据我所知,它没有提到任何关于工人的事情。 (如果这很重要,我会使用带有 SQS 的 Kombu 作为后端)

【问题讨论】:

为什么不使用github.com/mher/flower?甚至官方 Celery 文档也推荐它 (docs.celeryproject.org/en/latest/userguide/…)。 Flower 看起来不错,但对于我的海豚,我需要将其插入内部系统健康检查。所以我需要以编程方式进行。 那你需要延长花。 或者检查它的源代码并尝试弄清楚它是如何工作的 【参考方案1】:

在the documentation of celery workers 中解释了inspect 命令的输出。

默认情况下,使用celery.current_app.control.inspect() 返回一个“检查器对象”,允许您询问所有正在运行的工作人员的状态。例如,如果您使用名为“adder”和“sleeper”的两个正在运行的工作人员执行此代码:

    i = celery.current_app.control.inspect()
    i.registered()

i.registered() 的调用可能会返回如下内容:

    
      'adder@example.com': ['tasks.add'],
      'sleeper@example.com': ['tasks.sleeptask'],
    

总之,“检查器”方法registeredactivescheduled 等返回一个字典,其中包含在调用celery.current_app.control.inspect() 时选择的工人分类的结果(如果没有工人作为参数传递,所有工作人员都被隐式选择)。

【讨论】:

这看起来很有希望。奇怪的是,当我调用它时,我得到一个 SQS 身份验证错误。即使我的应用程序和工作人员可以正常连接。也许这个调用需要 SQS 队列的额外权限? 这是错误:SQSError: SQSError: 403 Forbidden queue.amazonaws.com/doc/2012-11-05/… to the resource queue.amazonaws.com is denied.37b59c-ee-aa5c-faeb0ecba29f 好像还不支持:SQS does not yet support worker remote control commands. 有趣。我想知道这是否意味着花也不起作用。 Celery 似乎使用相同的 inspect API 和 events API(SQS 也不支持)来更新其工作人员的状态,所以我猜它不会工作要么。

以上是关于Celery / Django - 如何以编程方式查看工人的状态的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式告诉 Celery 将所有日志消息发送到标准输出或标准错误?

如何在 Celery-Django 应用程序中监视来自工作人员的事件?

如何在 Django 1.11 中运行 celery worker

检查 celery beat 是不是启动并运行

celery+django+redis使用介绍

如何在 Django 中为 celery beat 设置不同的工作日/周末时间表?