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内部未完成的任务的正确数量,而active()
等人似乎只报告了16个左右--也许有一个限制?
除了使用对rabbitmqctl
的特权子进程调用之外,我如何从python内部获得完整排队的任务计数,最好是通过celery
(顺便说一下,该服务器目前正在使用芹菜3.1.8 )
发布于 2017-02-06 05:09:52
芹菜的app.control.inspect将检查仅通过运行员工来处理的任务。
即使队列中有数千个任务,但您的工作人员在任何给定的时间点只执行几个指定的任务。这些是active
任务。
此外,工作人员还可以预取一些任务,这些任务将保留给该员工。这些将在reserved
任务中显示。
如果您已经为您的任务设置了ETA,或者如果存在周期性任务,则它们将属于scheduled
任务。
看起来您已经启动了并发性为4的工作人员(或在4核心计算机上设置了默认设置的工作人员)。因此,活动任务是4。每个工作进程都预取了4个任务,从而产生了16个保留任务。
AFAIK,没有办法得到所有的任务排队与芹菜。
但是,有几种python解决方案可以获取队列中消息的总数。您可以检查我的另一个答案是否有其他方法来做到这一点。
更新:
pika
是一个与rabbitmq交互的python客户端。您可以使用它来使用消息。这是一个简单的消费示例每条消息。您可以在pika文档上查看更多的使用实例。
https://stackoverflow.com/questions/40857070
复制相似问题