Вот простой способ сделать это.
Создать единую общую очередь для выполнения работы.Это приложение заполнит эту очередь заданием.
Создайте приложение, которое получает один элемент из очереди и выполняет работу.
Это дизайн «один производитель - несколько потребителей».Он хорошо работает и может перегружать вашу машину параллельными процессами.
Чтобы использовать встроенный класс очереди, вам нужно обернуть очередь в какой-то API многопроцессорной обработки.http://docs.python.org/library/queue.html. Лично мне нравится создавать небольшой веб-сервер на основе HTTP, который обрабатывает очередь.Каждое приложение выполняет GET для получения следующей части работы.
Вы можете использовать такие инструменты, как RabbitMQ, для создания очень хорошей общей очереди.http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/
Возможно, вы сможете использовать http://hjb.python -hosting.com / для использования очередей JMS.
Вам понадобится небольшое приложение длясоздайте и заполните очередь работой.
Создайте столько копий приложения, сколько захотите.Например:
for i in 1 2 3 4 5 6 7 8 9 10
do
python myapp.py &
done
Будет запущено 10 одновременных копий вашего приложения.Все 10 пытаются получить работу из одной очереди.Они будут использовать все доступные ресурсы ЦП, и ОС будет хорошо планировать их для вас.
Одноранговая синхронизация между узлами означает, что у вас есть связь O (n * (n-1) / 2)пути между всеми узлами.
«Два соседних узла» означают, что у вас все еще есть 2 * n путей связи, и работа должна «как-то» просачиваться между узлами.Если все узлы изначально засеяны работой, то кто-то много планировал, чтобы сбалансировать рабочую нагрузку.Если вы собираетесь так много планировать, зачем вообще просить узлы синхронизироваться?
Если для начала очереди не тщательно сбалансированы, то каждый четный узел может быть медленным.Каждый нечетный узел может быть быстрым.Нечетные узлы заканчиваются первыми, проверяют работу с двух четных узлов, и эти узлы (а) не выполнены и (б) также не имеют больше работы.Что теперь?Половина узлов работает, половина простаивает.Все из-за плохого планирования в начальном распределении работы.
Ведущий-ведомый означает, что у вас есть n каналов связи.Кроме того, балансировка выполняется автоматически, поскольку все свободные узлы имеют равный доступ к работе.Нет такой вещи, как предвзятый начальный дистрибутив, который ведет к плохой общей производительности.