Приоритизация очередей среди нескольких очередей в celery?

мы используем сельдерей для наших асинхронных фоновых задач и у нас есть 2 очереди для разных задач. У нас есть 2 кластера узлов, обслуживающих их отдельно. Все работает хорошо, как ожидалось.

вопрос:

мы получаем в основном низкоприоритетные задачи. Для оптимизации использования ресурсов мне интересно, есть ли способ настроить работников(прослушивание очереди с высоким приоритетом) для прослушивания обеих очередей. Но возьмите задания из очереди с более высоким приоритетом как пока есть работа? и переход на очереди с низким приоритетом, в противном случае.

Я прошел через приоритетное планирование задач обсуждаются @ Сельдерей Приоритет Задачи.

но мои вопросы-это приоритеты очередей, а не только задачи в очереди.

2 ответов


вы можете частично достичь этого, определив несколько очередей для работника при его запуске.

вы можете сделать это с помощью следующей команды: Также см. здесь для получения более подробной информации.

celery -A proj worker -l info -Q Q1,Q2

хотя у этого подхода есть проблема. Он не делает этого с резервным подходом. Поскольку работники, прослушивающие несколько очередей, равномерно распределяют ресурсы между собой.

следовательно, ваше требование обработки только из "очереди с высоким приоритетом" даже когда есть что-то в обычной очереди не может быть достигнута. Это можно свести к минимуму, выделив больше работников (может быть 75%) для "очереди с высоким приоритетом" и 25% для "обычной очереди с приоритетом". или другая доля, основанная на вашей рабочей нагрузке.


к сожалению, это невозможно с сельдереем из коробки.

оптимальное решение-начать 2 рабочих. 1 для низкого приоритета и другое для высокого приоритета с процессом n.

когда нет высокоприоритетных задач, работник с низкоприоритетными задачами будет использовать все ресурсы и наоборот. Если есть обе задачи, ресурсы будут распределены равномерно.