Предположим, у нас есть следующий веб-сервис. Основная функция - делать скриншоты для данного URL сайта. Есть REST API и пользовательский интерфейс для ввода URL. Для каждого нового URL-адреса создается задача в Celery. Для внешнего интерфейса важно, чтобы экраны для некоторых URL-адресов отображались в течение разумного времени, например, 10 секунд.
Теперь пользователь, намеренно или из-за ошибки программного обеспечения, вводит несколько сотен URL-адресов. Это раздувает очередь задач, и другие пользователи должны ждать, пока все эти задачи не будут выполнены.
Итак, запрос здесь:
- Выполнение задач в некотором справедливом порядке. Самое простое решение - запустить по одной задаче для каждого пользователя за один раз. Например: задача user1, задача user2, задача user1, задача user2 и т. Д.
- Имеются некоторые приоритеты для задач. Как и задачи с приоритетом 1, всегда выполняются перед задачами с приоритетом 2.
В настоящее время мы используем наш ручной модуль. Он хранит задачи в Redis и отправляет их в справедливом порядке в Celery. Чтобы не зависеть от заказа Celery, он запускает столько задач, сколько доступно свободных рабочих Celery, и проверяет очередь Celery на наличие свободных рабочих каждые 100 миллисекунд.
Существуют ли библиотеки или службы, которые соответствуют моим требованиям?