Сельдерей мульти рабочих неожиданный порядок выполнения задачи
Я бегу сельдереем
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