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文档上查看更多用法示例。