У меня есть три идентичных сценария жемчуга; скажите test1.pl, test2.pl, test3.pl
Каждый сценарий жемчуга имеет ряд команд. Например;
управляйте для выполнения test1.plperl 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
Ваш сценарий жемчуга может запустить фоновые процессы (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
При помощи Параллели:: 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.