如何使用Celery制作一个包含所有待处理任务的仪表板?

10 投票
2 回答
2542 浏览
提问于 2025-04-16 01:59

我想找个地方可以查看所有待处理的任务。

我不是在说那些注册的函数或类作为任务,而是指那些实际安排好的工作,比如我想显示:名称、任务ID、预计完成时间、工作者等等。

我在使用Celery 2.0.2和djcelery时,发现文档里有个叫`inspect`的东西。我试了一下:

from celery.task.control import inspect

def get_scheduled_tasks(nodes=None):

    if nodes:
        i = inspect(nodes)
    else:
        i = inspect()

    scheduled_tasks = []
    dump = i.scheduled()
    if dump:
        for worker, tasks  in dump:
                for task in tasks:
                    scheduled_task = {}
                    scheduled_task.update(task["request"])
                    del task["request"]
                    scheduled_task.update(task)
                    scheduled_task["worker"] = worker 
                    scheduled_tasks.append(scheduled_task)

    return scheduled_tasks  

但是在执行dump = i.scheduled()时,它一直卡在那里,没反应。

这很奇怪,因为其他的功能都正常。

我用的是Ubuntu 10.04、django 1.0和virtualenv。

2 个回答

2

试试 Flower - 这是一个用来监控 Celery 的工具。
它提供了一个非常实用的仪表盘,可以用来监控排队的任务。

Flower - Celery 监控工具

5

看看这个celerymon,它可以启动一个网页服务器,显示所有安排好的任务。你需要用 -E 这个参数来运行 celery,这样才能开启事件功能,这些事件会被放到你的队列里,然后由 celerymon 程序来提取。

撰写回答