【问题标题】:Celery / Django - How to programatically see workers' statesCelery / Django - 如何以编程方式查看工人的状态
【发布时间】: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 看起来不错,但对于我的海豚,我需要将其插入内部系统健康检查。所以我需要以编程方式进行。
  • 那你需要延长花。
  • 或者检查它的源代码并尝试弄清楚它是如何工作的

标签: django celery django-celery amazon-sqs


【解决方案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
  • 有趣。我想知道这是否意味着花也不起作用。
  • Celery 似乎使用相同的 inspect API 和 events API(SQS 也不支持)来更新其工作人员的状态,所以我猜它不会工作要么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多