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