2014-04-17 31 views
9

Dev makinemde 2 sıra tanımlamak için kereviz docs'u takip ettim.Django/Celery localhost'ta birden çok kuyruk - çalışmayan yönlendirme

Benim kereviz ayarları:

CELERY_ALWAYS_EAGER = True 
CELERY_TASK_RESULT_EXPIRES = 60 # 1 mins 
CELERYD_CONCURRENCY = 2 
CELERYD_MAX_TASKS_PER_CHILD = 4 
CELERYD_PREFETCH_MULTIPLIER = 1 
CELERY_CREATE_MISSING_QUEUES = True 
CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'), 
    Queue('feeds', Exchange('feeds'), routing_key='arena.social.tasks.#'), 
) 
CELERY_ROUTES = { 
    'arena.social.tasks.Update': { 
     'queue': 'fs_feeds', 
    }, 
} 

i Projemin virtualenv, iki uç pencere açıldı ve aşağıdaki komutları koştum:

terminal_1$ celery -A arena worker -Q default -B -l debug --purge -n deafult_worker 
terminal_2$ celery -A arena worker -Q feeds -B -l debug --purge -n feeds_worker 

ne ben olsun tüm görevler tarafından işleniyor olmasıdır her iki kuyrukta.

Amacım, tüm diğer görevleri işlemek için CELERY_ROUTES'da tanımlanan bir görevi ve varsayılan sıranı işlemek için bir sıraya sahip olmaktır.

Ben de bu SO question, rabbitmqctl list_queues döner celery 0 izledi ve iki kez rabbitmqctl list_bindings döner exchange celery queue celery [] çalışan. Tavşan sunucusunu yeniden başlatmak hiçbir şeyi değiştirmedi.

cevap

18

Tamam, ben de anladım. Benim tüm ayarlarım, ayarlarım ve kereviz nasıl çalıştırılacağı, benim sorduğum gibi aynı şeyi merak edenler için yaptı.

Ayarlar

CELERY_TIMEZONE = TIME_ZONE 
CELERY_ACCEPT_CONTENT = ['json', 'pickle'] 
CELERYD_CONCURRENCY = 2 
CELERYD_MAX_TASKS_PER_CHILD = 4 
CELERYD_PREFETCH_MULTIPLIER = 1 

# celery queues setup 
CELERY_DEFAULT_QUEUE = 'default' 
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic' 
CELERY_DEFAULT_ROUTING_KEY = 'default' 
CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'), 
    Queue('feeds', Exchange('feeds'), routing_key='long_tasks'), 
) 
CELERY_ROUTES = { 
    'arena.social.tasks.Update': { 
     'queue': 'feeds', 
     'routing_key': 'long_tasks', 
    }, 
} 

nasıl kereviz çalıştırmak için?

terminali - sekmesi 1:

celery -A proj worker -Q default -l debug -n default_worker 

bu varsayılan sırasından görevleri tüketir ilk işçi başlayacaktır. NOT! -n default_worker ilk çalışan için bir zorunluluk değildir, ancak başka bir kereviz örneğiniz varsa ve koşmanız gerekiyorsa bir zorunluluktur. -n worker_name ayarı [email protected]%h ile aynıdır.

terminali - sekmesi 2: Bu ikinci işçiyi başlayacak

celery -A proj worker -Q feeds -l debug -n feeds_worker 

o yemlerin kuyruktan tüketiciler görevler. Not -n feeds_worker, -l debug (günlük düzeyi = hata ayıklama) ile çalışıyorsanız, her iki işçilerin aralarında eşitleme olduğunu göreceksiniz.

terminali - sekmesi 3:

celery -A proj beat -l debug 

Bu CELERYBEAT_SCHEDULE yılında programa göre görevlerini yürütürken, ritmi başlayacaktır. Görevi değiştirmek zorunda değildim veya CELERYBEAT_SCHEDULE.

Örneğin beslemeleri kuyruğuna gitmeli görev için benim CELERYBEAT_SCHEDULE nasıl göründüğünü şudur ki:

CELERYBEAT_SCHEDULE = { 
    ... 
    'update_feeds': { 
     'task': 'arena.social.tasks.Update', 
     'schedule': crontab(minute='*/6'), 
    }, 
    ... 
} 

Gördüğünüz gibi

, 'options': {'routing_key': 'long_tasks'} eklemeye veya gitmeli Sıraya ne belirterek gerek.Ayrıca, neden Update'un üst casus olduğunu merak ediyorsanız, onun celery.Task alt sınıfları olarak tanımlanan özel bir görevi olduğundan.

+0

Kereviz 3.1 üzerinde yeni biçim 'task_queue' kullanıyordum. 'CELERY_ROUTES' kullanımı çalışıyor. – Netro

İlgili konular