2017-05-02 4 views
1

je lance le céleri:Céleri travailleurs multi-exécution des tâches inattendues pour

celery multi start --app=myapp fast_worker 
     slow_worker 
     -Q:fast_worker fast-queue  
     -Q:slow_worker slow-queue 
     -c:fast_worker 1 -c:slow_worker 1 
     --logfile=%n.log --pidfile=%n.pid 

Et celerybeat:

celery beat -A myapp 

Tâche:

@task.periodic_task(run_every=timedelta(seconds=5), ignore_result=True) 
def test_log_task_queue(): 
    import time 
    time.sleep(10) 
    print "test_log_task_queue" 

Routing:

CELERY_ROUTES = { 
    'myapp.tasks.test_log_task_queue': { 
     'queue': 'slow-queue', 
     'routing_key': 'slow-queue', 
    }, 
} 

J'utilise rabbitMQ. Quand j'ouvre le panneau d'administration rabbitMQ, je vois que mes tâches sont dans slow-queue, mais quand j'ouvre les logs je vois la sortie de tâche pour les deux ouvriers. Pourquoi les deux travailleurs exécutent-ils mes tâches, même lorsque la tâche n'est pas dans la file d'attente des travailleurs?

Répondre

0

Il semble que celery multi crée quelque chose comme des files d'attente partagées. Pour résoudre ce problème, j'ai ajouté l'option -X:

celery multi start --app=myapp fast_worker 
    slow_worker 
    -Q:fast_worker fast-queue  
    -Q:slow_worker slow-queue 
    -X:fast_worker slow-queue 
    -X:slow_worker fast-queue 
    -c:fast_worker 1 -c:slow_worker 1 
    --logfile=%n.log --pidfile=%n.pid