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'],
总之,“检查器”方法registered
、active
、scheduled
等返回一个字典,其中包含在调用celery.current_app.control.inspect()
时选择的工人分类的结果(如果没有工人作为参数传递,所有工作人员都被隐式选择)。
【讨论】:
这看起来很有希望。奇怪的是,当我调用它时,我得到一个 SQS 身份验证错误。即使我的应用程序和工作人员可以正常连接。也许这个调用需要 SQS 队列的额外权限? 这是错误:SQSError: SQSError: 403 Forbiddeninspect
API 和 events
API(SQS 也不支持)来更新其工作人员的状态,所以我猜它不会工作要么。以上是关于Celery / Django - 如何以编程方式查看工人的状态的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式告诉 Celery 将所有日志消息发送到标准输出或标准错误?
如何在 Celery-Django 应用程序中监视来自工作人员的事件?