Прервать выполнение задачи в 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()