2010-08-26 4 views
6

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

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

, где AsyncBoot - заданная задача.

Я могу получить идентификатор задачи (предполагая, что это длинная строка, возвращаемая apply_async) и сохранить ее в базе данных, но я не уверен, как вызвать метод прерывания. Я вижу, как сделать методы abortable с классом задач Abortable, но если у меня есть только строка с идентификатором задачи, как я могу вызвать aabort() в задаче? Благодарю.

ответ

10

apply_async возвращает AsyncResult экземпляр, или в данном случае AbortableAsyncResult. Сохраните task_id и используйте это, чтобы создать новый код AbortableAsyncResult, убедившись, что вы предоставили дополнительный аргумент для бэкэнда, если вы не используете 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() 
+1

Стоит отметить, что в документах сельдерея говорится: «Этот класс будет работать только с базами данных». http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable.html?highlight=abort#celery.contrib.abortable – dgorissen

4

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

Чтобы прервать использование задачи result.abort():

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

Но как получить объект результата на более поздний срок, если все, что я является TASK_ID? Я пытаюсь прервать задачу, когда у меня больше нет доступа к объекту результата. Мне нужно, чтобы вытащить его из базы данных. – Anon

+0

Солить объект результата в базе данных, затем – ionelmc

+0

'mytask.AsyncResult (task_id)' или 'from celery.result import AsyncResult; AsyncResult (TASK_ID) '. – asksol

Смежные вопросы