2

我有一个使用 Celery 3.0.23 和 RabbitMQ 3.1.5 的 Django 1.5.1 webapp。
从我的后端读取 TaskMeta 信息时使用

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

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

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

4

1 回答 1

1

您可以通过查看任务的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交换:

python manage.py celery events

或者你可以为同样的任务开花。他们都将实时(而不是历史)向您显示任务。您可以尝试使用SQL-database 作为代理,这样会对您有所帮助。

于 2013-10-08T06:50:44.673 回答