2010-08-26 48 views
6

我希望能夠中止從Celery隊列運行的任務(使用rabbitMQ)。我打電話給任務使用在django中取消Celery中的正在運行的任務

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

其中AsyncBoot是一個已定義的任務。

我可以得到任務ID(假設是apply_async返回的長字符串)並將其存儲在數據庫中,但我不確定如何調用中止方法。我看到如何使Abortable任務類放棄方法,但如果我只有任務ID字符串,該如何在任務上調用.abort()?謝謝。

回答

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 2011-11-08 17:03:08

4

您是否看到參考文檔? http://celeryq.org/docs/reference/celery.contrib.abortable.html

要中止任務使用result.abort()

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

但我怎麼在如果所有的我已經是TASK_ID日後得到結果對象?當我不再訪問結果對象時,我試圖中止任務。我需要把它從數據庫中提取出來。 – Anon 2010-08-30 15:12:23

+0

Pickle數據庫中的結果對象然後 – ionelmc 2011-10-17 22:30:50

+0

'mytask.AsyncResult(task_id)'或'from celery.result import AsyncResult; AsyncResult(TASK_ID)'。 – asksol 2011-10-19 18:27:03

相關問題