Hola Tengo un script simple que toma un archivo y ejecuta otro script Perl en él. La secuencia de comandos hace esto a cada archivo de imagen en la carpeta actual. Esto se ejecuta en una máquina con 2 procesadores Xeon de cuatro núcleos, 16 gb de ram, ejecutando RedHat Linux.¿Cómo puedo modificar mi script Perl para usar múltiples procesadores?
El primer script work.pl básicamente llama a magicplate.pl pasa algunos parámetros y el nombre del archivo para magicplate.pl para procesar. La placa mágica tarda aproximadamente un minuto en procesar cada imagen. Debido a que work.pl está realizando la misma función más de 100 veces y porque el sistema tiene múltiples procesadores y núcleos, estaba pensando en dividir la tarea para que pueda ejecutarse varias veces en paralelo. Podría dividir las imágenes en diferentes carpetas si es necesario. Cualquier ayuda sería genial. Gracias
Esto es lo que tengo hasta ahora:
use strict;
use warnings;
my @initialImages = <*>;
foreach my $file (@initialImages) {
if($file =~ /.png/){
print "processing $file...\n";
my @tmp=split(/\./,$file);
my $name="";
for(my $i=0;$i<(@tmp-1);$i++) {
if($name eq "") { $name = $tmp[$i]; } else { $name=$name.".".$tmp[$i];}
}
my $exten=$tmp[(@tmp-1)];
my $orig=$name.".".$exten;
system("perl magicPlate.pl -i ".$orig." -min 4 -max 160 -d 1");
}
}
"ejecutar intérprete perl una y otra vez para cada archivo nuevo no es una buena idea" - Sí, pero cuando se bifurca, no está iniciando un nuevo intérprete perl. Fork copia el proceso principal y Linux usa CoW, por lo que es incluso más económico que una copia completa. – JimB
Además, ¿por qué está comenzando un nuevo intérprete después de la bifurcación? Ejecute el código perl en el nuevo proceso hijo. – JimB
@JimB: me refiero a la llamada al sistema no bifurcada. Y uso la llamada al sistema porque el código original lo usaba. – gangabass