Выполнение Нескольких сценарий жемчуга одновременно

У меня есть три идентичных сценария жемчуга; скажите test1.pl, test2.pl, test3.pl

Каждый сценарий жемчуга имеет ряд команд. Например;

управляйте для выполнения test1.pl perl test1.pl arg1 arg2 &;

test1.pl

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core
`command2`;   ### Takes ~10 Minute and use 2 core
`command3`;   ### Takes ~10 Minute and use 1 core
`command4`;   ### Takes ~10 Minute and use 1 core

И подобный для test2.pl и test3.pl

Теперь, я хочу использовать неактивные потоки ЦП путем выполнения test2.pl, как только command1 в test1.pl заканчивается. Так, чтобы command1 в test2.pl мог использовать неактивные потоки, в то время как "command2, command3 и command4 может быть закончен одновременно также.

И то же на следующем шаге (Выполненный test3.pl, как только команда 1 в концах test2.pl).

Поэтому; test1.pl мог бы быть похожим на это;

test1.pl

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core

**`perl test2.pl arg3 arg4 &`;**

`command2`;   ### Takes ~10 Minute and use 2 core

`command3`;   ### Takes ~10 Minute and use 1 core

`command4`;   ### Takes ~10 Minute and use 1 core

Однако выполнение (test2.pl) как это приостановит команды оставлений test1.pl. Так не хороший путь.

Любой рекомендует или предложения.Спасибо.

Amit

0
задан 14 August 2015 в 05:53

2 ответа

Ваш сценарий жемчуга может запустить фоновые процессы (X &) самостоятельно. Это может использовать вызов функции ветвления.

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core

# start child process
my $child_pid = fork() // die "Can't fork: $!"; # die unless defined($child_pid);
if ($child_pid == 0 ) {
   # am the child process
   exec( 'perl', 'test2.pl' );
   die "exec failed!";
}
# am the parent process

`command2`;   ### Takes ~10 Minute and use 2 core
`command3`;   ### Takes ~10 Minute and use 1 core
`command4`;   ### Takes ~10 Minute and use 1 core

 # wait for the child process to finish 
 waitpid $child_pid, 0;
1
ответ дан 1 October 2019 в 04:37

Метод: 1

При помощи Параллели:: ForkManager, Вы можете запустить скрипт параллельно.

# you create list and feed into for loop
for loop[i]:
   execute the perl script[i]
end

Метод: 2

у Нас есть опция выполнить несколько сценариев Perl в одной строке при помощи & в терминале Linux.

Пример: perl script1 & perl script2 & perl script3

Сценарий 1, 2, 3 будет выполнен inparallel.

0
ответ дан 1 October 2019 в 04:37

Другие вопросы по тегам:

Похожие вопросы: