在Celery中获取队列中的任务列表

220 投票
19 回答
267052 浏览
提问于 2025-04-16 15:05

我该如何获取一个还没有处理的任务队列中的任务列表呢?

19 个回答

56

如果你在使用rabbitMQ,可以在终端里输入这个命令:

sudo rabbitmqctl list_queues

这条命令会显示出所有队列的列表,以及每个队列里还有多少个待处理的任务。例如:

Listing queues ...
0b27d8c59fba4974893ec22d478a7093    0
0e0a2da9828a48bc86fe993b210d984f    0
10@torob2.celery.pidbox 0
11926b79e30a4f0a9d95df61b6f402f7    0
15c036ad25884b82839495fb29bd6395    1
celerey_mail_worker@torob2.celery.pidbox    0
celery  166
celeryev.795ec5bb-a919-46a8-80c6-5d91d2fcf2aa   0
celeryev.faa4da32-a225-4f6c-be3b-d8814856d1b6   0

右边那一列的数字就是队列里待处理任务的数量。在上面的例子中,celery队列里有166个待处理的任务。

67

如果你在使用Celery+Django,最简单的方式就是直接在你的虚拟环境中,或者用完整路径来运行celery命令,来查看任务情况:

文档: http://docs.celeryproject.org/en/latest/userguide/workers.html?highlight=revoke#inspecting-workers

$ celery inspect reserved
$ celery inspect active
$ celery inspect registered
$ celery inspect scheduled

另外,如果你在使用Celery+RabbitMQ,你可以用下面的命令来查看队列列表

更多信息: https://linux.die.net/man/1/rabbitmqctl

$ sudo rabbitmqctl list_queues
241

编辑:查看其他答案以获取队列中任务的列表。

你可以看看这里:

Celery指南 - 检查工作者

基本上就是这个意思:

my_app = Celery(...)

# Inspect all nodes.
i = my_app.control.inspect()

# Show the items that have an ETA or are scheduled for later processing
i.scheduled()

# Show tasks that are currently active.
i.active()

# Show tasks that have been claimed by workers
i.reserved()

这要看你想要什么了。

撰写回答