Сельдерей мульти рабочих неожиданный порядок выполнения задачи

Я бегу сельдереем

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

И сельдерей

celery beat -A myapp

Задача:

@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"

Маршрутизация:

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

Я использую rabbitMQ. Когда я открываю админ-панель rabbitMQ, я вижу, что мои задачи находятся в slow-queue, но когда я открываю логи, я вижу вывод задачи для обоих работников. Почему оба работника выполняют мои задачи, даже если задача не находится в очереди?

1 ответ

Это выглядит как celery multi создает что-то вроде общих очередей. Чтобы исправить эту проблему, я добавил -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
Другие вопросы по тегам