首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么celery.control.inspect报告的排队任务比兔子少?

为什么celery.control.inspect报告的排队任务比兔子少?
EN

Stack Overflow用户
提问于 2016-11-29 03:01:37
回答 1查看 3.2K关注 0票数 9

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

代码语言:javascript
运行
复制
$ sudo rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged
default 13142   13126   16

然而,芹菜报告:

代码语言:javascript
运行
复制
>>> 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 )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 05:09:52

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

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

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

如果您已经为您的任务设置了ETA,或者如果存在周期性任务,则它们将属于scheduled任务。

看起来您已经启动了并发性为4的工作人员(或在4核心计算机上设置了默认设置的工作人员)。因此,活动任务是4。每个工作进程都预取了4个任务,从而产生了16个保留任务。

AFAIK,没有办法得到所有的任务排队与芹菜。

但是,有几种python解决方案可以获取队列中消息的总数。您可以检查我的另一个答案是否有其他方法来做到这一点。

更新:

pika是一个与rabbitmq交互的python客户端。您可以使用它来使用消息。这是一个简单的消费示例每条消息。您可以在pika文档上查看更多的使用实例

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40857070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档