2010-08-26 13 views
6

Ich möchte in der Lage sein, eine Aufgabe abzubrechen, die aus einer Sellerie-Warteschlange (mit RabbitMQ) ausgeführt wird. Ich rufe die Aufgabe mitAbbrechen einer laufenden Aufgabe in Sellerie innerhalb django

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

wo AsyncBoot eine definierte Aufgabe ist.

Ich kann die Task-ID (vorausgesetzt, dass die lange Zeichenfolge, die apply_async zurückgibt) und speichern Sie es in einer Datenbank, aber ich bin mir nicht sicher, wie Sie eine Abbruchmethode aufrufen. Ich sehe, wie Methoden mit der abortable Aufgabenklasse abgebrochen werden können, aber wenn ich nur die Task-ID-Zeichenfolge habe, wie rufe ich .abort() für die Aufgabe auf? Vielen Dank.

Antwort

10

apply_async gibt eine AsyncResult Instanz, oder in diesem Fall ein AbortableAsyncResult: http://celeryq.org/docs/reference/celery.contrib.abortable.html

Um die Aufgabe Verwendung result.abort() abbrechen. Speichern Sie die task_id und verwenden Sie diese, um später eine neue AbortableAsyncResult zu instanziieren und sicherzustellen, dass Sie das optionale Backend-Argument angeben, wenn Sie nicht die default_backend verwenden.

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

Später:

abortable_async_result = AbortableAsyncResult(myTaskId) 
abortable_async_result.abort() 
+1

Es ist erwähnenswert, dass die Sellerie-Dokumente sagen: "Diese Klasse wird nur mit den Datenbank-Backends arbeiten." http://docs.selleryproject.org/en/latest/reference/sellery.contrib.abortable.html?highlight=abort#cellery.contrib.abortable – dgorissen

4

Haben Sie die Referenzdokumentation gesehen?

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

Aber wie bekomme ich Ergebnisobjekt zu einem späteren Zeitpunkt, wenn alles, was ich habe die task_id ist? Ich versuche, die Aufgabe abzubrechen, wenn ich keinen Zugriff mehr auf das Ergebnisobjekt habe. Ich brauche es irgendwie, um es aus der Datenbank zu holen. – Anon

+0

Pickle das Ergebnisobjekt in der Datenbank dann – ionelmc

+0

'mytask.AsyncResult (task_id)' oder 'von sellery.result import AsyncResult; AsyncResult (task_id) '. – asksol

Verwandte Themen