- Kerlinux.org - http://kerlinux.org -

Parallélisation facile en Perl

Posted By SLiX On 21 avril 2010 @ 15 h 44 min In Informatique | 2 Comments

Comment paralléliser facilement des traitements en utilisant Perl ?

Il suffit d’utiliser le module « Parallel::ForkManager ». Celui-ci créé des processus qui traitent indépendamment les itérations d’une boucle, tout en restant limité au nombre de processus spécifié.

Ce module est disponible dans Debian GNU/Linux et dérivées (Ubuntu, …) sous le nom libparallel-forkmanager-perl:

Installation:

# apt-get install libparallel-forkmanager-perl

Voici un petit exemple d’utilisation, permettant de paralléliser le redimensionnement d’images (pensez à installer imageMagick is vous voulez tester cet exemple):

#!/usr/bin/perl -w
use strict;
use warnings;

use Parallel::ForkManager;

my $size = "1024";
my $max_process = 4;
my $filter = "lanczos";

my $pm = new Parallel::ForkManager($max_process);

my $resized;

foreach my $image (@ARGV) {
    # Fork
    my $pid = $pm->start and next;

    # Début du traitement

    # Construction du nom de l'image redimensionnée
    # image.jpg -> image-size.jpg
    ( $resized = $image ) =~ s/.(w+)$/-$size.$1/;

    # Redimensionnement
    system("convert -resize $size -filter $filter "$image" "$resized"" );

    # Affiche des points de progression...
    print '.';

    # Fin du traitement

    $pm->finish;
}

# Attente de tous les sous-processus avant de continuer
$pm->wait_all_children;
print "done\n";

exit 0;

Une présentation un peu plus approfondie:

http://www.perlmonks.org/?node_id=291446 [1]


Article printed from Kerlinux.org: http://kerlinux.org

URL to article: http://kerlinux.org/2010/04/parallelisation-facile-en-perl/

URLs in this post:

[1] http://www.perlmonks.org/?node_id=291446: http://www.perlmonks.org/?node_id=291446

Copyright © 2010 Kerlinux.org. Tous droits réservés.