我使用带有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
。这看起来有点笨拙。
答案 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,这样会对您有所帮助。