Perl - можете ли вы запускать потоки на нескольких машинах? - PullRequest
1 голос
/ 18 ноября 2010

Мне было интересно, можно ли запускать потоки в Perl на нескольких машинах. Я работаю в кластерной среде и мне нужно запустить некоторые процессы параллельно, но я не могу использовать MPI. Если многопоточность не может использоваться на разных машинах, есть ли другие альтернативы, на которые я должен обратить внимание, которые позволят мне сделать нечто подобное и не потребуют специальных модулей?

Ответы [ 4 ]

4 голосов
/ 18 ноября 2010

Потоки (и разветвления) в Perl привязаны к тому же компьютеру, что и родительский поток / процесс, поэтому межпотоковые потоки / разветвления отсутствуют. Тем не менее, вы можете использовать AnyEvent :: MP / Coro :: MP модули, расширения для передачи сообщений в AnyEvent асинхронной среде цикла обработки событий и Coro соответственно подпрограмма, основанная на совместной работе потоков, которая позволяет вам создавать сеть узлов, выполняющих различные задачи на одном или нескольких компьютерах. Подробнее см. AnyEvent :: MP :: Intro .

Что касается альтернатив, не требующих специальных модулей (под которыми, я полагаю, вы подразумеваете модули, не входящие в дистрибутив perl), вы могли бы написать демона для ваших задач и заставить их взаимодействовать по TCP или UDP. Для всего этого, вероятно, потребуется по крайней мере несколько модулей, не установленных с Perl, но доступных из CPAN.

2 голосов
/ 18 ноября 2010

Посмотрите на Gearman , очередь менеджера заданий с несколькими машинами. требует специальных модулей;Я ответил здесь «на всякий случай», вы можете использовать дополнительные модули / инфраструктуру.

Существуют привязки Perl, Gearman :: XS , которые я успешно использую в проектах, где мне нужны конкретныезадачи, выполняемые в среде, в которой запросы или рабочие процессы могут находиться на нескольких компьютерах.Хорошо работает также для нескольких рабочих процессов на одном компьютере и одного запросчика (пример: определенный веб-скребок, который запрашивает все ссылки со страницы, проанализированной любым работником, но хочет сохранить контроль над результатами).

Способработает то, что вы создаете «рабочую» Perl-программу, которая имеет ряд подпрограмм, которые выполняют действие, которое вы хотели бы выполнять распределенным способом.Вы запускаете эти рабочие программы на тех машинах, которые вам нужны, и столько раз, сколько вы хотите, и позволяете им подключаться к одному (или нескольким) главному «диспетчеру».Затем вы создаете Perl-программу-запросчик (клиент Gearman), которая будет выполнять запросы.Это также может быть запущено на любой машине, и он свяжется с главным мастером-механиком, чтобы запросить выполнение ряда конкретных рабочих действий.Любой работник делает это, и ваш запросчик получает результат обратно.

Если ваши запросчики не нуждаются в возвращении результата, а "просто" нуждаются в выполнении задачи, вместо этого посмотрите TheSchwartz которая имеет аналогичную архитектуру, но не предоставляет средства для получения сообщений от рабочих обратно запрашивающим, IIRC.

1 голос
/ 18 ноября 2010

Check GRID :: Machine.

1 голос
/ 18 ноября 2010

Я наткнулся на GNU parallel неделю или две назад, хотя не на отдельных машинах это помогает сократить время, позволяя обычным программам использовать преимущества нескольких ядер.Может помочь ускорить все, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...