2016-03-28 30 views
5

我刚刚安装了芹菜,我想创建一个简单的状态页面,显示当前的工人数量及其状态。芹菜/ Django - 如何以编程方式查看工人状态

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

但据我所知,它没有提到关于工人的任何事情。 (如果有问题,我使用Kombu和SQS作为后端)

+0

为什么不使用https://github.com/mher/flower?即使官方的芹菜文档推荐它(http://docs.celeryproject.org/en/latest/userguide/monitoring.html?highlight=flower#flower-real-time-celery-web-monitor)。 –

+0

花看起来不错,但对于我的海豚,我需要将其插入内部系统健康检查。所以我需要以编程方式进行。 – Greg

+1

然后你需要延长花。 – TheGreenGoblen

回答

7

the documentation of celery workers中说明了inspect命令的输出。

默认情况下,使用celery.current_app.control.inspect()返回一个“检查器对象”,它允许您询问所有正在运行的工人的状态。

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

调用i.registered()可以返回类似:

{ 
     '[email protected]': ['tasks.add'], 
     '[email protected]': ['tasks.sleeptask'], 
    } 

总之,“检查”例如,如果你有一个名为“加法”和“卧铺”两场倒的工人执行该代码方法registered,active,scheduled等返回一个字典,其结果是调用celery.current_app.control.inspect()时选择的工人分类的结果(如果没有工人作为参数传递,则隐式选择所有工人)。

+0

看起来很有希望。奇怪的是,当我打电话时,我得到一个SQS认证错误。即使我的应用程序和工作人员可以正常连接。也许这个调用需要额外的SQS队列权限? – Greg

+0

以下是错误:SQSError:SQSError:403 Forbidden <?xml version =“1.0”?> SenderAccessDenied访问资源https://queue.amazonaws.com/被拒绝。 37b59c-EE-aa5c-faeb0ecba29f Greg

+0

似乎它可能不被支持:SQS尚不支持工人远程控制命令(http://docs.celeryproject.org/en /latest/getting-started/brokers/sqs.html#caveats)。 –