Прервать выполнение задачи в Celery в django

Я хотел бы иметь возможность прервать задачу, которая выполняется из очереди сельдерея (используя rabbitMQ). Я вызываю задачу с помощью

task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)

где AsyncBoot-определенная задача.

Я могу получить идентификатор задачи (предполагая, что это длинная строка, которая apply_async returns) и сохранить его в базе данных, но я не уверен, как вызвать метод abort. Я вижу, как сделать методы abortable с классом Abortable tasks, но если у меня есть только строка Task-id, как мне вызвать .abort() в задач? Спасибо.

2 ответов


apply_async возвращает AsyncResult например, в данном случае AbortableAsyncResult. Сохранить task_id и используйте это для создания экземпляра нового AbortableAsyncResult позже, убедившись, что вы предоставляете дополнительный аргумент backend, если вы не используете default_backend.

abortable_async_result = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
myTaskId = abortable_async_result.task_id

позже:

abortable_async_result = AbortableAsyncResult(myTaskId)
abortable_async_result.abort()

вы видели справочную документацию? http://celeryq.org/docs/reference/celery.contrib.abortable.html

для отмены задачи используйте result.abort():

>>> result = AsyncBoot.apply_async(...)
>>> result.abort()