Как равномерно распределить задачи по узлам с помощью Celery? - PullRequest
0 голосов
/ 12 декабря 2011

Я использую Celery с Django для управления очередью задач и использую один (или несколько) небольших (одноядерных) экземпляров EC2 для обработки задачи.

У меня есть несколько соображений.

  • Моя задача съедает 100% ЦП на одном ядре. - использует любой доступный процессор, но только в одном ядре
  • Если в одном и том же ядре выполняются 2 задачи, каждая задача будет замедлена вдвое.
  • Я хотел бы запускать каждую задачу как можно скорее и не допускать ее очередности.

Теперь скажите, что у меня 4 экземпляра EC2, я начинаю сельдерей с "-c 5". то есть 5 одновременных задач на экземпляр.

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

Аналогичным образом, если у меня есть 8 задач, идентифицируйте каждый экземпляр так, чтобы получать по 2 задачи за раз, а не 2 экземпляра, обрабатывающих по 4 задачи.

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

1 Ответ

2 голосов
/ 12 декабря 2011

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

Теперь задачи не мешают и не распределяются между вами.

(вышеизложенное предполагает, что ваши задачи связаны с процессором)

...