Получить название задачи Celery изнутри Django

У меня есть веб-приложение Django 1.5.1, использующее Celery 3.0.23 с RabbitMQ 3.1.5.
При чтении информации TaskMeta из моего бэкэнда с помощью

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

Я не могу прочитать имя задачи (обычно это имя метода). Он не хранится в базе данных. Есть ли способ сохранить имя задачи или извлечь ее во время выполнения?

Если нет, я уже думаю о сохранении его в мета-свойствах, но это подразумевает, что я должен вручную вызвать update_state на каждую задачу, которую я создаю. Это выглядит немного неуклюже для меня.

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-базу данных в качестве брокера, иначе вам это поможет.

Другие вопросы по тегам