2012-01-06 27 views
6

Sadece bir Django projesinde kerevizle başlıyorum ve bu özel problemde sıkışıp kaldım: Temel olarak, farklı çalışanlara uzun süren bir görevi dağıtmam gerekiyor. Görev aslında her biri tamamlanması için önemli bir süre alan birkaç aşamaya bölünmüştür. Bu nedenle, bazı adımlar başarısız olursa, sonuçların tamamlanmış adımlardan yeniden kullanılması için aynı çalışanı kullanarak bu görevi yeniden denemek için kereviz isterim. Kereverin görevleri belirli bir sunucuya dağıtmak için yönlendirmeyi kullandığını anlıyorum, ancak bu sorunla ilgili hiçbir şey bulamıyorum. RabbitMQ'yi aracım olarak kullanırım. Her celeryd örneği olabilirAynı işçi kullanarak kereviz yeniden deneme nasıl yapılır?

cevap

11

işçinin hostname adını taşıyan kuyruktan tüketmek:

celeryd -l info -n worker1.example.com -Q celery,worker1.example.com 

worker1.example.com için hostname belirtir ve aynı adlı bir kuyruğa yanı sıra varsayılan kuyruğundan tüketecek (celery olarak adlandırılmıştır).

task.apply_async(args, kwargs, queue="worker1.example.com") 

similary yeniden deneme yönlendirmek için:

task.retry(queue="worker1.example.com") 

veya aynı işçiye yeniden deneme yönlendirmek için:

Sonra

kullanabileceğiniz belirli işçiye bir görev yönlendirmek için
task.retry(queue=task.request.hostname) 
+0

Cevabınız için çok teşekkürler! Bence tam da aradığım şey bu. Yeniden adlandırabilmenin() olduğunu anlayamadım, ama şimdi çok mantıklı geliyor :) – dangmai

+0

'celeryd' şimdi kullanımdan kaldırıldı, kereviz işçisi kullan. – user

+0

Komut satırını oluşturmak için windows'ta '% computername%' ve linux üzerindeki '\' hostname \ '' işlevini kullanın. – ubershmekel

İlgili konular