İki sunucum var: biri django uygulaması çalıştıran ve ikisi de bir rabbitmq kuyruğu ve bir kereviz işçisi çalıştıran. aşağıdaki gibi kuyruk/işçi çalıştıran sunucuda Benim tasks.py bir görevi içerir:Bu görevi içe aktarma sırasında bir Kereviz görevini yürütme
@task(queue="reports")
def test_task():
time.sleep(120)
Amacım Django görünümünden bu görevi yürütmek etmektir. Görevin kodu, django görünümünden farklı bir sunucuda olduğundan, görevi çağırmak istiyorum, görevi django'dan çalışan makineye göndermek için aşağıdaki kodu kullanmaya çalışıyorum.
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
Ben bu yöntemi
here bulundu, ancak şu ana kadar işe yaramadı test.
Kereviz işçi sunucusundaki kereviz işçi günlük dosyasında kuyruk-F ile test ediyorum, daha sonra tarayıcıda send_task içeren görünümün URL'sine gidiyorum. Kuyruk çıktısında 'alınan' olarak görünme görevini arıyorum, ama değil.
Kereviz işçisinin günlük düzeyi DEBUG, günlük dosyası görevin doğru adla kaydedildiğini gösterir ve django uygulamasının settings.py öğesi tavşanmq sunucusu için doğru IP ve kimlik bilgilerini içerir. Farklı yaklaşımları denerken, zaman zaman geçerli bir görev (yani send_task ('asdf')) olmayan bir şey için send_task geçirilen dize değiştiğinde kereviz günlük dosyasında bir hata iletisi gördüm. Bu, günlük dosyasında bir UnregisteredError neden oldu. Bununla birlikte, bu yalnızca bazen olur ve farklı ayar kombinasyonlarını ve çağrıları test etmede şimdiye kadar, davranışları güvenilir bir şekilde çoğaltmanın bir yolunu bulamadım.
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
Etrafa google'dan ve send_task çok bulamadı:
Ayrıca, bu (kaldırıldı gerçek değerler ile) Django projede settings.py ilgili bölümüdür. Neyi yanlış yaptığım hakkında bir fikrin var mı?
Kodunuzu her iki makine arasında nasıl paylaştığınızı bilmek isterdim. İşte bununla ilgili yazdığım bir soru: http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server Teşekkürler! – lajarre