获取celery任务数量

6 投票
1 回答
2695 浏览
提问于 2025-04-17 03:05

我正在使用 Python 的 Celery 和 RabbitMQ。我找不到办法来获取某个队列中的任务数量。

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

有没有办法从特定的队列中获取任务数量呢?

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

"rabbitmqctl list_queues -p my_vhost"

然后解析结果,这样做好吗?

1 个回答

5

我觉得在我的Ubuntu服务器上使用rabbitmqctl命令不是个好办法,因为这个命令只能在拥有管理员权限的情况下执行。

通过玩弄pika这个库里的对象,我找到了一个可行的解决方案:

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队列的文档,所以我不太确定这个解决方案是否正确。

撰写回答