Статус Джанго-сельдерея ПОЛУЧЕН?

Я запускаю некоторые задачи через django-celery (с rabbitmq в качестве бэкэнда), задачи требуют много времени и интенсивно используют процессор.

У меня есть 2 рабочих экземпляра Ec2 (один маленький, а другой - средний по процессору).

Я настроил малый экземпляр на выполнение 1 параллельной задачи, а средний — на 4. Мне это подходит. Но иногда в мониторе сельдерея я вижу, что маленький экземпляр работает над задачей, а еще 2 или 3 задачи находятся в состоянии «ПОЛУЧЕНО» (назначены маленькому экземпляру), а средний экземпляр ничего не делает. В идеале средний экземпляр должен иметь предпочтение перед малым, но в этом случае, если малый находится в состоянии параллелизма, задача должна перейти к среднему экземпляру. Кажется, что маленький экземпляр кусает больше, чем может проглотить... например, при назначении себе задач, которые он не может запустить в данный момент.

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

Скриншот: http://dl.dropbox.com/u/361747/task-state.png . Рабочий, начинающийся с domU, — маленький, начинающийся на ip — средний.


person sajal    schedule 15.01.2012    source источник


Ответы (1)


Вы можете использовать параметр CELERYD_PREFETCH_MULTIPLIER, чтобы контролировать количество задач для предварительной выборки. В вашем случае CELERYD_PREFETCH_MULTIPLIER=1 поможет равномерно распределить задачи.

http://ask.github.com/celery/configuration.html#celeryd-prefetch-multiplier

person mher    schedule 17.01.2012
comment
Спасибо, не знал о такой настройке. Сегодня проверю позже. - person sajal; 18.01.2012