Найти - Пользователи
Полная версия: Django Celery Multiple queues
Начало » Django » Django Celery Multiple queues
1
Antonio051
Есть celery-worker, который обслуживает конкретную очередь:
python manage.py celery worker -c 1 -E -l INFO -n phones -Q htc
“-n phones” - имя воркера
“-Q htc” - имя, обслуживаемой очереди

Динамически создаю новую очередь и отправляю её воркеру “phones”.

Как заставить воркер обслуживать одновременно две очереди. Чтобы брал задания из каждой очереди.
Сейчас же он берёт по принципу FIFO.

PS. “-c 1” это для пирмера. Увеличивать concurrency не вариант. Необходимо равномерно опустошать очереди.

Брокер: RabbitMQ/Redis
Lexander
Указать вторую очередь через запятую.
Но это все равно не гарантирует математической равномерности.
Antonio051
Lexander
Указать вторую очередь через запятую.
-Q htc,lg
Это я в курсе.
Но я делаю это динамически.
Lexander
Динамически задаете название очереди или что?
http://docs.celeryproject.org/en/latest/userguide/workers.html#std:control-add_consumer
Antonio051
Lexander
http://docs.celeryproject.org/en/latest/userguide/workers.html#std:control-add_consumer
Именно это я и использую.
Проблема в том, как воркер берет задания из нескольких очередей.
Наткнулся на weighted fair queueing. Это то, что мне нужно.
Celery использует Kombu. В ней есть такая штука http://kombu.readthedocs.org/en/latest/reference/kombu.transport.virtual.scheduling.html

Теперь не понимаю как её использовать?

Далее вижу http://docs.celeryproject.org/en/master/whatsnew-3.0.html#redis-now-cycles-queues-so-that-consuming-is-fair
Т.е. если использовать redis как брокер, то будет работать “справедливая очередь”.
Ща попробую
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB