为什么 celery.control.inspect 报告的排队任务比 rabbitmqctl 少?
Why does celery.control.inspect report fewer queued tasks than rabbitmqctl?
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
(顺便说一句,此服务器使用的是 Celery 3.1 .8 当前)
Celery 的 app.control.inspect 将检查 仅由 运行 workers.
处理的任务
即使队列中有数千个任务,您的工作人员在任何给定时间点也只会执行少数指定任务。这些是 active
个任务。
除此之外,工作人员可以预取一些为该工作人员保留的任务。这些将显示在 reserved
个任务中。
如果您为任务设置了 ETA,或者如果有周期性任务,它们将属于 scheduled
个任务。
看起来您已经启动了一个并发为 4 的工作程序(或在 4 核机器上使用默认设置的工作程序)。所以active tasks是4个。每个worker进程预取了4个tasks,结果就是16个reserved tasks。
AFAIK,无法获取 celery 队列中的任务总数。
不过,有几种 python 解决方案可以获取队列中的消息总数。您可以检查 my other answer here 以了解其他方法。
更新:
pika
是一个 python 与 rabbitmq 交互的客户端。您可以使用它来消费消息。这是 pika 文档上的 simple example to consume each message. You can checkout more usage examples。
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
(顺便说一句,此服务器使用的是 Celery 3.1 .8 当前)
Celery 的 app.control.inspect 将检查 仅由 运行 workers.
处理的任务即使队列中有数千个任务,您的工作人员在任何给定时间点也只会执行少数指定任务。这些是 active
个任务。
除此之外,工作人员可以预取一些为该工作人员保留的任务。这些将显示在 reserved
个任务中。
如果您为任务设置了 ETA,或者如果有周期性任务,它们将属于 scheduled
个任务。
看起来您已经启动了一个并发为 4 的工作程序(或在 4 核机器上使用默认设置的工作程序)。所以active tasks是4个。每个worker进程预取了4个tasks,结果就是16个reserved tasks。
AFAIK,无法获取 celery 队列中的任务总数。
不过,有几种 python 解决方案可以获取队列中的消息总数。您可以检查 my other answer here 以了解其他方法。
更新:
pika
是一个 python 与 rabbitmq 交互的客户端。您可以使用它来消费消息。这是 pika 文档上的 simple example to consume each message. You can checkout more usage examples。