Мы работаем над многопользовательской арендой и переосмысливаем управление очередями и сельдереями. Мы позволяем нашим пользователям выполнять некоторые тяжелые работы на нашем сайте и хотим предотвратить ситуацию, когда один пользователь захламляет очередь сельдерея, забирая всех рабочих, в то время как другие пользователи ждут выполнения других задач.
Идея, которую мы придумали для решения этой проблемы:
- Создание 5 очередей
- при добавлении новых цепочек задач в очередь, проверьте, какая очередь имеетнаименьшее количество задач и добавьте задачи в эту очередь
- убедитесь, что все работники потребляют из всех очередей одновременно
- назначьте приоритеты различным цепочкам задач (чтобы некоторые задачи имели более высокий приоритет, чем другие)
Мне удалось создать несколько очередей и отправить им задачи с разными приоритетами.
но я не могу найти способ узнать, сколько задач ожидает в очереди в любой момент.
Я посмотрел на Queue
объект в app.amqp.queues['NAME_OF_QUEUE']
(где app = Celery("my_app")
) и не смог найти там ничего (это может быть потому, что он не привязан к Exchange
объекту? Но я читал этот сельдерейиспользует очереди напрямую, что означает, что у меня нет Exchange для привязки к нему)
Я хотел бы знать:
как я могу проверить, сколько задач у меня есть в определенной очереди в любой момент времени (динамически)?
будут ли рабочие извлекать из всех очередей одновременно прямо из коробки (при условии, что я настроил их на прослушивание всех 5 очередей)?
есть ли лучший способ сделать это \я должен переосмыслить этот дизайн?
ура :)