Самый простой способ создать очередь задач и запустить на каждом рабочей машине фиксированное количество процессов. Раз количество процессов фиксированное, будет ограничено количество одновременных запросов к оборудованию.
Каждый процесс будет брать из очереди задание, выполнять его и ждать следующего. И так в цикле до бесконечности. Хост, к-ый полностью загружен просто не будет брать задания.
Это при условии того, что вам нужен максимальный throughput, и затраты на постановку задания в очередь и его миграцию на узел значительно меньше затрат на обработку.
Дальше начинаются танцы с бубном.
* Какой критерий оптимизации throughput или latency?
* Есть ли разделяемое хранилище данных или нужно лить задания сразу на хосты?
* Длительность выполнения задания?
* Какое время миграции задания на хост?
* Есть ли нагрузка на хосты другими приложениями?
* Задания одинакового размера или разные?
* Нужно ли повторять задание, если хост который его взял на выполнение — упал?