Я запускаю некоторые задачи через django-celery (с rabbitmq в качестве бэкэнда), задачи требуют много времени и интенсивно используют процессор.
У меня есть 2 рабочих экземпляра Ec2 (один маленький, а другой - средний по процессору).
Я настроил малый экземпляр на выполнение 1 параллельной задачи, а средний — на 4. Мне это подходит. Но иногда в мониторе сельдерея я вижу, что маленький экземпляр работает над задачей, а еще 2 или 3 задачи находятся в состоянии «ПОЛУЧЕНО» (назначены маленькому экземпляру), а средний экземпляр ничего не делает. В идеале средний экземпляр должен иметь предпочтение перед малым, но в этом случае, если малый находится в состоянии параллелизма, задача должна перейти к среднему экземпляру. Кажется, что маленький экземпляр кусает больше, чем может проглотить... например, при назначении себе задач, которые он не может запустить в данный момент.
Есть ли способ заставить работников принимать только те задачи, которые они могут запустить в данный момент?
Скриншот: http://dl.dropbox.com/u/361747/task-state.png . Рабочий, начинающийся с domU, — маленький, начинающийся на ip — средний.