У меня есть сельдерей с MySQL
. Я хочу сохранить идентификатор задачи в виде простого целого в базе данных или в переменной сельдерея task
. Как я могу это сделать?Хранение идентификатора задачи для каждой задачи сельдерея в базе данных
ответ
Почему бы не создать целевую модель сельдерея и сохранить идентификатор задачи сельдерея для этой модели?
class CeleryModel(models.Model):
celery_task_id = models.CharField(max_length = 50, unique=True)
Тогда:
def some_celery_task():
result = celery_task.delay()
celery_task = CeleryModel(celery_task_id = result.id)
celery_task.save() # added save line
Ваше целое значение будет затем: celery_task.id
, чтобы соответствовать фактической, уникальной celery_task_id.
UPDATE: другой способ ...
Первый python manage.py inspectdb > inspectdb.py
. Внутри этого файла вы найдете:
class CeleryTaskmeta(models.Model):
id = models.IntegerField(primary_key=True)
task_id = models.CharField(max_length=765, unique=True)
status = models.CharField(max_length=150)
result = models.TextField(blank=True)
date_done = models.DateTimeField()
traceback = models.TextField(blank=True)
hidden = models.IntegerField()
meta = models.TextField(blank=True)
class Meta:
db_table = u'celery_taskmeta'
Далее, python manage.py startapp celery_model
. Поместите этот файл в файл models.py. Я использую юг, поэтому мой последний шаг будет python manage.py convert_app celery_model
. Однако, это не нужно. Теперь у вас есть доступ на уровне django к этому набору данных сельдерея, и вы можете прочитать первичный ключ для каждой задачи как целое значение. Например
>>> ct = CeleryTaskmeta.objects.get(id=1)
>>> for k,v in ct.__dict__.items(): print k,v
...
status SUCCESS
task_id 2fa95f24-7640-434c-9fef-0732ac1d23c7
date_done 2013-02-17 19:22:56+00:00
traceback None
_state <django.db.models.base.ModelState object at 0x10263fa90>
meta eJxrYKotZAzlSM7IzEkpSs0rZIotZC7WAwBREgb9
result gAJLBC4=
hidden 0
id 1
Кто-то умный знает, как сделать свой CeleryTaskmeta
модель только для чтения, потому что я не думаю, что вы хотели бы подделать с DataTable.
UPDATE: к последней части вашего вопроса:
>>> from celerytest.tasks import add
>>> result = add.delay()
>>> result.int_id = 1
>>> for k,v in result.__dict__.items(): print k,v
...
parent None
app <Celery default:0x10264df10>
task_name celerytest.tasks.add
int_id 1
id 01503afd-d196-47af-8e10-e7dc06603cfc
backend <djcelery.backends.database.DatabaseBackend object at 0x1026842d0>
Чтобы получить сельдерей идентификатор задачи при запуске задачи я сделать следующее:
process_task = my_task.apply_async(args=[args])
task_id = process_task.task_id
где my_task является метод в tasks.py
- 1. Вызов задачи сельдерея из другой задачи сельдерея
- 2. сельдерея Запуск задачи, когда другие задачи закончивших
- 3. Необходимо знать синтаксис для хранения идентификатора задачи в заявлении b для постоянных аннулирования задачи сельдерея
- 4. Возможный тупик задачи сельдерея?
- 5. Отказывать задачи Сельдерея?
- 6. Задачи сельдерея сразу автообнаружение
- 7. Как цепочки сельдерея задачи
- 8. Как структурировать задачи сельдерея
- 9. отложенное выполнение задачи сельдерея
- 10. задачи цепи сельдерея
- 11. получить имя задачи сельдерея AsyncResult
- 12. Новая очередь RabbitMQ, созданная для каждой задачи сельдерея
- 13. импульс для каждой задачи
- 14. Задачи установки и удаления сельдерея
- 15. сельдерея предел дает Rate попытка для неизвестной задачи имени задачи
- 16. Процессы вилки для каждой задачи в сельдерей
- 17. сельдерея периодические задачи не запускающие
- 18. Задачи сельдерея с непредсказуемыми аргументами
- 19. Получение событий от задачи сельдерея
- 20. Не записывать параметр задачи сельдерея в djcelery
- 21. Проблема с дублированием задачи сельдерея
- 22. Задачи из сельдерея из подзадач
- 23. Как выбрать очередь результатов для задачи сельдерея?
- 24. XSL для каждой задачи компоновки
- 25. Задачи сельдерея Утеряны после отправки брокеру rabbitmq
- 26. Как проверить и отменить задачи сельдерея по названию задачи
- 27. Python Сельдерей - Как назвать задачи сельдерея внутри другой задачи
- 28. Модель Django не сохраняется в базе данных внутри задачи Celery
- 29. вызов задачи сельдерея в методе просмотра Django?
- 30. Как установить статус задачи в цепочке сельдерея
Благодарим за тщательное и чистое объяснение! – pynovice
Bro проблема заключается в том, что я хочу получить task_id по мере запуска процесса. Оказывается, данные записываются в таблицу CeleryTaskMeta только после успешного завершения работы. – pynovice
@Cole Как сохранить результаты асинхронной очистки в базе данных? – losee