Executando vários scripts perl simultaneamente

0

Eu tenho três scripts perl idênticos; diga test1.pl, test2.pl, test3.pl

Cada script perl tem um conjunto de comandos. Por exemplo:

comando para executar 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

E semelhante para test2.pl e test3.pl

Agora, quero utilizar os encadeamentos cpu ociosos executando o test2.pl assim que o comando1 em test1.pl for concluído. Assim, o command1 no test2.pl pode usar encadeamentos inativos enquanto o "command2, command3 e command4 podem ser finalizados simultaneamente também.

E o mesmo no próximo passo (Execute o test3.pl assim que o comando 1 no test2.pl terminar).

Portanto; test1.pl pode ser assim:

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

No entanto, a execução (test2.pl) como essa fará uma pausa nos comandos restantes do test1.pl. Então não é um bom caminho.

Quaisquer elogios ou sugestões. Obrigado.

Amit

    
por Amit Goyal 14.08.2015 / 02:54

2 respostas

1

Seu script perl pode iniciar os processos em segundo plano (X & amp;). Pode usar a chamada da função do garfo.

#!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;
    
por AnFi 14.08.2015 / 05:10
0

Método: 1

Usando o Parallel :: ForkManager, você pode executar o script em paralelo.

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

Método: 2

Temos a opção de executar vários scripts Perl em uma única linha usando & no terminal Linux.

Exemplo: perl script1 & perl script2 & perl script3

O Script 1, 2, 3 será executado em paralelo.

    
por sathees dd 14.06.2018 / 18:44