【问题标题】:celery get tasks count芹菜获取任务计数
【发布时间】:2024-12-08 13:25:01
【问题描述】:

我正在使用 python celery+rabbitmq。我找不到在某个队列中获取任务计数的方法。 像这样的东西:

celery.queue('myqueue').count()

是否可以从确定队列中获取任务计数?

一种解决方案是从我的 python 脚本运行外部命令:

"rabbitmqctl list_queues -p my_vhost"

并解析结果,这是一个好方法吗?

【问题讨论】:

  • 看看here
  • 当然可以运行外部命令来获取其他地方可用的一些信息...

标签: python rabbitmq celery


【解决方案1】:

我认为使用rabbitmqctl命令不是很好的解决方案,尤其是在我的ubuntu服务器上,rabbitmqctl只能以root权限执行。

通过玩鼠兔对象,我找到了可行的解决方案:

import pika
from django.conf import settings 

def tasks_count(queue_name):
    ''' Connects to message queue using django settings and returns count of messages in queue with name queue_name. '''
    credentials = pika.PlainCredentials(settings.BROKER_USER, settings.BROKER_PASSWORD)
    parameters = pika.ConnectionParameters( credentials=credentials,
                                           host=settings.BROKER_HOST,
                                           port=settings.BROKER_PORT,
                                           virtual_host=settings.BROKER_VHOST)
    connection = pika.BlockingConnection(parameters=parameters)
    channel = connection.channel()
    queue = channel.queue_declare(queue=queue_name, durable=True)
    message_count = queue.method.message_count
    return message_count

我没有找到关于用 pika 检查 AMQP 队列的文档,所以我不知道解决方案的正确性。

【讨论】: