Salut J'ai un script simple qui prend un fichier et exécute un autre script Perl dessus. Le script le fait pour tous les fichiers image du dossier actuel. Cela fonctionne sur une machine avec 2 processeurs Xeon quad core, 16 Go de RAM, exécutant RedHat Linux.Comment puis-je modifier mon script Perl pour utiliser plusieurs processeurs?
Le premier script work.pl appelle fondamentalement magicplate.pl transmet certains paramètres et le nom du fichier pour magicplate.pl à traiter. Magic Plate prend environ une minute pour traiter chaque image. Parce que work.pl exécute la même fonction plus de 100 fois et parce que le système a plusieurs processeurs et cœurs, je pensais diviser la tâche afin qu'elle puisse fonctionner plusieurs fois en parallèle. Je pourrais diviser les images en différents dossiers si nécessaire. Toute aide est la bienvenue. Merci
Voici ce que j'ai jusqu'à présent:
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");
}
}
"Exécuter encore et encore l'interpréteur Perl pour chaque nouveau fichier n'est pas une bonne idée" - Oui, mais lorsque vous utilisez un fork, vous ne lancez pas un nouvel interpréteur Perl. Fork copie le processus parent, et Linux utilise CoW, donc c'est encore moins cher qu'une copie complète. – JimB
Aussi, pourquoi commencez-vous un nouvel interprète après votre fourchette? Exécutez le code Perl dans le nouveau processus enfant. – JimB
@JimB: Je veux dire l'appel système ne pas forking. Et j'utilise l'appel système parce que le code original l'a utilisé. – gangabass