2012-02-06 16 views
15

Celery'da eş zamanlı bir eşzamanlılık (eşzamanlı çalışan sayısı) görev başı düzeyinde ayarlanabilir mi? CELERYD_CONCURRENCY'un (tüm daemonun eş zamanlılığını ayarlayan) daha hassas bir şey arıyorum.Celery: görev eşzamanlılık sınırları başına (görev başına düşen işçilerin sayısı)?

Kullanım senaryosu şu şekildedir: Farklı performans özelliklerine sahip farklı türlerde görevleri yürüten tek bir celerlyd var - bazıları hızlı, bazıları çok yavaş. Bazıları için olabildiğince hızlı olabildiğince çok şey yapmak isterim, başkaları için sadece bir örneğin herhangi bir zamanda çalıştığından emin olmak isterim (yani, 1'in eşzamanlılığı).

cevap

25

Görevleri, farklı eşzamanlılık düzeylerine sahip kereviz işçileri tarafından işlenecek farklı sıralara yönlendirmek için automatic routing'u kullanabilirsiniz.

celeryd-çoklu başlangıç ​​hızlı yavaş -c: Yavaş 3 -c: sırasıyla hızlı ve 3 yavaş sıraları ve 5 eşzamanlılık seviyelerini dinleme hızlı 5

Bu komut başlattı 2 kereviz işçiler .

CELERY_ROUTES = { "tasks.a": { "sıra": "yavaş"} "tasks.b": { "sıra": "hızlı"}}

görevleri type tasks.a, yavaş ve task.b görevlerini sırasıyla hızlı kuyruk tarafından işlenecektir.

+1

Teşekkürler 0x00mh. Böylece eşzamanlılığı sıralarda tanımlayabilirim, ancak görevlerde değil. Ve bunun inanıyorum ki birden fazla kereviz canavarı başlatıyorum. Yani sanırım bu, görev başına eşzamanlılığı ayrı bir daemon kullanmadan ayarlamanın bir yolu yok mu? – Parand

+0

CELERYD_CONCURRENCY, kaç işlemin (çalışan işlemleri) başlatılacağını tanımlar. İşçi süreçleri, aracıdan bağımsız olarak mesajlar alır. Mesaj yürütmek için görev adını içerir. – mher