从Django中获取Celery任务名称

时间:2013-10-03 10:59:43

标签: django celery djcelery

我使用带有RabbitMQ 3.1.5的Celery 3.0.23的Django 1.5.1 webapp 来自我后端的reading the TaskMeta informations使用

from djcelery.models import TaskMeta
TaskMeta.objects.all()

我无法读取任务名称(通常是方法名称)。它不存储在数据库中。有没有办法存储任务名称或在运行时检索它?

如果没有,我已经考虑将其存储在元属性中,但这意味着我手动必须在我创建的每个任务上调用update_state。这看起来有点笨拙。

1 个答案:

答案 0 :(得分:0)

您可以通过查看任务的name属性来获取您的任务名称,例如:

In [1]: from celery import task

In [2]: @task
   ...: def hello():
   ...:     print hello.name
   ...:     

In [3]: hello()
default.hello

In [4]: hello.name
Out[4]: 'default.hello'

如果您愿意,可以使用celery.execute.send_task()按名称调用该任务。

UPD。当您使用RabbitMQ作为代理时,Celery使用celeryev交换发布任务的所有状态更新。 Django将不会有任何关于任务的信息,因为存储所有这些信息是一个巨大的性能损失。您可以使用以下命令连接到celeryev exchange:

python manage.py celery events

或者您可以flower执行相同的任务。它们都会以实时(非历史记录)显示任务。您可以尝试使用SQL-database as broker,这样会对您有所帮助。