为什么芹菜.control.smpect报告的排队任务少于兔子QCTL



rabbitmqctl正确报告了数千个排队任务:

$ sudo rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
default 13142   13126   16

然而芹菜报告:

>>> len(app.control.inspect().active()['celery@default'])
4
>>> len(app.control.inspect().scheduled()['celery@default'])
1
>>> len(app.control.inspect().reserved()['celery@default'])
16
>>> len(app.control.inspect().revoked()['celery@default'])
0

app.control.inspect().stats()['celery@default']['total']中似乎出现了正确的任务数字(千),但我真的想知道来自Python内部的正确数量 nower deccount 排队的任务,而active()等似乎只有报告最多16左右 - 也许有一个限制?

缺少使用特权子进程调用rabbitmqctl,我如何从Python内获得完整的排队任务计数,最好通过celery(BTW当前使用芹菜3.1.8)

芹菜的app.control.insprect将检查仅通过运行工人来处理的任务。

即使您在队列中有成千上万的任务,您的工作人员将在任何给定时间点只执行少数指定的任务。这些是active任务。

除此之外,工人还可以预摘一些任务,这些任务将保留给该工人。这些将显示在reserved任务中。

如果您设置了任务的ETA或如果有定期任务,则它们将在scheduled任务下。

看来您已经启动了一个与4(或4个核心机器上默认设置的工人)的工人。因此,主动任务为4。每个工作过程都有预取4个任务,这导致了16个保留任务。

afaik,没有办法与芹菜队列中获得总数。

但是,有几种Python解决方案可以在队列中获取消息总数。您可以在此处查看我的其他答案以获取其他方法。

更新:

pika是与RabbitMQ互动的Python客户端。您可以使用它来消耗消息。这是一个简单的示例,可以消耗每个消息。您可以在Pika文档上查看更多用法示例。

相关内容

  • 没有找到相关文章

最新更新