2010-08-26 17 views
6

Bir Kereviz kuyruğundan (rabbitMQ kullanarak) çalışan bir görevi iptal edebilmek istiyorum. AsyncBoot tanımlı bir görev olanKerter'de django içinde çalışan bir görevi durdurma

'u kullanarak görevi arıyorum.

Görev kimliğini (bu apply_async döndüren uzun dize olduğunu varsayarak) alabilir ve veritabanında saklayabilirim ancak iptal yöntemini nasıl arayacağımı bilmiyorum. Abortable görevler sınıfı ile nasıl abortable yöntemlerin nasıl yapıldığını görüyorum, ancak yalnızca task-id dizesine sahip olsaydım, görevde .abort() öğesini nasıl ararım? Teşekkürler.

cevap

10

apply_async bir AsyncResult örneğini verir veya bu durumda bir AbortableAsyncResult içinde: http://celeryq.org/docs/reference/celery.contrib.abortable.html

görev kullanımını result.abort() durdurmak için. task_id'u kaydedin ve modelini yeni bir örnek oluşturmak için kullanın ve default_backend'u kullanmıyorsanız arka uç isteğe bağlı bağımsız değişken sağladığınızdan emin olun.

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

Sonra:

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

Kereviz belgelerinin “bu sınıf sadece veritabanı yedekleriyle çalışacağını” söylüyor. http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable.html?highlight=abort#celery.contrib.abortable – dgorissen

4

Referans belgelerini gördünüz mü?

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

Ama nasıl benim sahip olduğum tek task_id ise daha sonraki bir tarihte sonuç nesnesi alırım? Artık sonuç nesnesine erişemediğimde görevi iptal etmeye çalışıyorum. Veritabanından almak için bir yere ihtiyacım var. – Anon

+0

Veritabanındaki sonuç nesnesini daha sonra – ionelmc

+0

'mytask.AsyncResult (task_id)' veya 'celery.result alma AsyncResult; AsyncResult (task_id) '. – asksol

İlgili konular