Шаблон производитель-потребитель в муравье
Это не совсем модель производителя-потребителя, но это достаточно близко, чтобы описать мою проблему.
У меня есть список элементов, которые должны быть использованы N процессов. Я хотел бы присвоить номеру процесса элемент, как только он будет свободен, а не жестко задавать код заказа.
Например, чтобы запустить тест, нужно вызвать:
<runTest target="t1">
<property name="instance" value="i1" />
</runTest>
Если бы у меня было i1
в i3
в руке, и t1
в t10
тесты для запуска я мог бы сделать:
<parallel>
<runTest target="t1">
<property name="instance" value="i1" />
</runTest>
<runTest target="t2">
<property name="instance" value="i2" />
</runTest>
<runTest target="t3">
<property name="instance" value="i3" />
</runTest>
<parallel>
Затем я бы подождал, пока это завершится и запустится одинаково с разными целями. Я мог бы также зациклить весь этот код, чтобы уменьшить утомительность. Но возможно ли выбрать цель и передать ее экземпляру, как только это будет сделано с предыдущей целью?
2 ответа
Поскольку параллельная задача и задача for слишком примитивны для обработки требований такого типа, если кто-то склонен использовать Ant, я считаю, что необходимо написать новую задачу ant (учебное пособие здесь) для обработки этого поведения.
Я также понял, что мы можем использовать задачу "скрипт" для написания короткого фрагмента кода, например, Ruby или Javascript, для достижения той же цели.
Возможно, эту проблему было бы легче решить вне АНТ?
Я бы порекомендовал посмотреть на автоматизированный сборочный движок, такой как Jenkins. Он имеет возможность делегировать задания по сборке пулу рабочих процессов, запущенных локально или на "подчиненных" узлах. Дженкинс также имеет несколько плагинов рабочих процессов, которые позволяют запускать задания на основе успеха или неудачи других заданий. Вот как реализованы конвейеры непрерывной интеграции / доставки.
Надеюсь, это поможет.