Хобрук: Ваш путь к мастерству в программировании

Справедливое распределение задач по нескольким очередям с помощью Celery

Я оцениваю сельдерей для своего рабочего процесса очереди задач. Мои требования немного уникальны. В системе есть понятие проектов, и каждый проект будет иметь (потенциально большое) количество связанных с ним задач. Я хотел бы, чтобы система очередей распределяла эти задачи справедливым образом, чтобы один проект с очень большим количеством задач для обработки не приводил к голоданию других проектов.

Например, предположим, что ProjectA имеет 100 связанных с ним задач, и все эти задачи отправляются одновременно. Первые 5 задач снимаются и передаются 5 рабочим. Пока обрабатываются первые 5 задач, ProjectB отправляется с еще 100 задачами. ProjectB не должен ждать, пока ProjectA выполнит все 100 своих задач, чтобы получить некоторое время обработки. Вместо этого, как только рабочий становится свободным, он должен обрабатывать задачу ProjectB. Затем следующий рабочий, который освободится, должен выполнить задачу ProjectA и т. д. в циклическом режиме.

Я думал, что могу динамически создавать новые очереди для каждого проекта и заставлять всех рабочих извлекать из всех очередей, как описано в это сообщение SO. Однако, согласно этому ответу, работники сельдерея фактически будут обрабатывать задачи в том порядке, в котором они были отправлены, независимо от очереди, в которой они находятся. (что мне тоже кажется немного странным). Это не работает для меня, потому что это приведет к голоданию проектов, отправленных после того, как текущий обрабатывается.

Можно ли использовать Celery для реализации моих требований? Если нет, есть ли рекомендуемая передовая практика для реализации моих требований?

24.09.2015

Ответы:


1

Из моего тестирования сельдерей МОЖЕТ использоваться для реализации ваших требований, поскольку очереди обрабатываются в циклическом стиле. См. мой ответ в другом сообщении SO, на которое вы ссылались.

В зависимости от того, насколько быстро вам нужен ответ для задач ProjectB, вы можете изменить значение PREFETCH_MULTIPLIER. Я полагаю, что по умолчанию это значение равно 4, что, насколько я понимаю, означает, что ваши работники сельдерея извлекают элементы из очереди партиями по 4 (см. this ТАК опубликуйте для получения дополнительной информации). Таким образом, если у вас много рабочих, многие элементы в очереди ProjectA уже могут быть «зарезервированы», даже если они еще не обрабатываются, и ваш материал ProjectB будет стоять в очереди за всеми теми элементами, которые находятся в очереди. сдержанный.

08.10.2015
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..