2013-08-12 30 views
36

düşünüldüğünde Kereviz zaten görev sıraları çalıştırmak için yığının bir parçası olan (yani sadece bir overkill IMHO görünüyor ki, crons çalıştırmak için eklenmektedir değildir). Neden Celery ile zamanlanmış görevleri çalıştırmak crontab üzerinde tercih edilir?

nasıl onun "periyodik görevler" özelliği crontab için yedek olarak yararlı olabilir? Aşağıdaki noktaları özellikle arıyorum. kereviz crontab daha iyi bir seçimdir

  • Başlıca artıları/crontab üzerinde aleyhte
  • Kullanım senaryoları
  • Django belirli bir kullanım durumu: kereviz yığını dahil edilmiştir dayalı periyodik görevleri django çalıştırmak için crontab, vs Kereviz django görevlerini sıralamak için django-celery olarak.
+2

Büyük şey cron en env vars uygulaması dağıtım geri kalanından çok farklılaşmaya eğiliminde olmasıdır. Kerevizde periyodik görevlere sahip olmak, çok fazla yolu ve ayarları cehenneme engeller. Benim analizi öncelikle django odaklı kod tabanı ve dağıtım kurulumu için, ancak diğer cronjobs dolu bir çoklu dil kod temeli django birden cron ortamı "daha standart" düşünebilirsiniz: Ama tamamen bir yargı çağrısı. – AdamKG

+1

[Bu cevap] (http://stackoverflow.com/questions/16232572/distributed-task-queues-ex-celery-vs-crontab-scripts), nihai değil de, bu yönde bazı iyi noktaları sağlar. Ayrıca, sunuculara giriş yapmak ve crontab'ı manuel olarak düzenlemek yerine django admin aracılığıyla görevleri yönetmek/kontrol etmek daha kolaydır. – Sudipta

cevap

32

Bir üretim web sitesi için cron'u kullanıyorum ve mevcut proje üzerinde kereviz geçiş yaptı.

  • Kereviz + Celerybeat cron daha ince boyutu bulunur: neden burada, çok daha cron daha kereviz içine değilim. kereviz (Ben bir görev mesaj göndermek için bir e-posta kuyruğu denetler her 90 saniyede bir olarak devam etmesi ve çevrimiçi kullanıcıların listesini temizler hangi başka) olurken Cron, bir dakika kereden fazla çalıştırılamaz.
  • bir cron çizgi mutlak yolu ve kullanıcı bilgileri ile, bir komut dosyası veya benzersiz bir komutu çağırmak zorundadır. Kereviz, python işlevlerini çağırır, koddan daha fazla yazmaya gerek yoktur. kereviz ile
  • , başka bir makineye dağıtmak için, genellikle sadece tek bir yerde genellikle kodunuzu,/çekme kopyalamak gerekiyor. cron ile dağıtma fazla iş gerekir Gerçekten kısa görevler için, kereviz iyi rutin temizlik (önbellek, veritabanı) için cron daha uygundur ve genel olarak
  • bulmak (bunu otomatik hale ama ... olabilir). Ancak bir veritabanını boşaltmak, daha uzun görevler ile olay kuyruğunu karıştırmak istemediğinizden, daha çok bir cron çalışmasıdır.
  • azından Kereviz kolayca makineler arasında dağıtılır değil.
+3

+1. Her zaman yönetim sitesinden periyodik görevleri ekleyebilir ve yönetebilirsiniz, sunucu konsoluna bağlanmanıza gerek yoktur. – panchicore

+0

bazı notlar: örtüşme istenmediğinde, sık çalıştırın ve "üst üste" olabilir Cron görevler sürüden ile çalıştırılmalıdır. Böyle vakalar için kereviz görevleri belirtilen süre sona ermelidir. Sunucular farklı varsayılan saat dilimleri sahip olabilir ve cron'u kurarken bu dikkate alınmalıdır.Kereviz, CELERY_TIMEZONE ile uygulama düzeyinde belirli bir saat dilimi kullanacak şekilde yapılandırılabilir. Kereviz görevleri sırası bellek veya disk alanı tüketir: sıraya göre büyümediğinizden emin olmalısınız. "Cron ile konuşlandırma", "run-parts" ile bir dereceye kadar otomatikleştirilebilir – imposeren

3

Birden çok makinedeki işleri koordine etmeniz, makinelerin bir çalışma grubundan eklendiği veya bırakıldığı, hatta iş için son kullanma süreleri ayarlanabildiği, işlerin sona erme sürelerini belirleyebileceği, işlerin çok adımlı işlerle tanımlanabileceği bir zamanda iş görmeniz gerekir doğrusal bağımlılık akışından ziyade grafik stili veya birden fazla işletim sistemi ve sürümünde aynı şekilde çalışan tek bir programlama mantığı deposu vardır. WSGI uygulama sunucusu ve kereviz işçi - Benim için