IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Aide processing parallèle


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut Aide processing parallèle
    Salut à tous,

    J'ai quelques soucis pour faire du processing en parallèle. En gros, j'ai un programme écrit en bash qui va appeler plusieurs fois mon programme écrit en Perl.

    Voilà mon programme bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    (tail -f /home/collectd/logs/file1 | perl /home/collectd/etc/collection.pl file1 arg2) &
    (tail -f /home/collectd/logs/file2 | perl /home/collectd/etc/collection.pl file2 arg2) &
    (tail -f /home/collectd/logs/file3 | perl /home/collectd/etc/collection.pl file3 arg2) &
    (tail -f /home/collectd/logs/file4 | perl /home/collectd/etc/collection.pl file4 arg2) &
    (tail -f /home/collectd/logs/file5 | perl /home/collectd/etc/collection.pl file5 arg2) &
    while [1 -eq 1]; do
      sleep 50;
    done
    Ce programme va surveiller l'ajout de lignes dans des fichiers de log et les envoyer à mon programme perl pour qu'il collecte des données sur les nouvelles lignes si elles correspondent à un certain type. Ce programme bash est censé lancé en parallèle toutes les commandes mais ça ne fonctionne pas très bien car quand je quitte le programme qui a lancé ce script et bien il tourne toujours.

    Voici mon programme perl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/usr/bin/perl
     
    use warnings;
    use strict;
     
    if ($#ARGV != 1){
        print "You did not give the two necessary arguments.\nUsage: perl my_prog.pl filename VOP\n";
        exit;
    }
     
    my $file_name=$ARGV[0];
    my $sum_type=$ARGV[1];
     
    my $node_name;
    my $operation_type;
    my $operation_counter;
     
    chomp($sum_type, $file_name);
     
    my $previous_fh = select(STDOUT);
    $| = 1;
    select($previous_fh);
     
    while (<STDIN>){
        chomp;
        if (/\s$sum_type\sSUMMARY\s\[(\w+)\.\w+\]\s(\w+)\scnt\/(\d+)\s/) {
            $server_name=$1;
            $operation_type=$2;
            $operation_counter=$3;
            my $timestamp=time;
     
            print "PUTVAL $node_name/cvfs-$file_name/operations-$operation_type $timestamp:$operation_counter";
        }
    }
    Il va me sortir des données si la ligne qu'il analyse correspond à ce que je recherche.

    Ce que je voudrais faire, c'est ne plus utiliser mon script bash. Je voudrais faire en parallèle la surveillance d'ajout de ligne dans mes 5 fichiers de logs et le traitement de celles-ci directement dans mon programme perl. J'ai cherché dans la doc perl j'ai vu qu'il y avait forkmanager mais je ne comprends par vraiment comment faire. Est-ce que quelqu'un aurait une idée comment je pourrai faire ?

    Merci d'avance

  2. #2
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut
    Je te fais un copier/coller de la manière dont l'un de mes scripts en appel un autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("perl jouv.pl $log $p $an $v")

Discussions similaires

  1. multi-process en parallèle
    Par besco dans le forum Linux
    Réponses: 1
    Dernier message: 06/10/2008, 22h04
  2. [bash] lancer X process en parallèle
    Par troumad dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 20/09/2007, 20h56
  3. Aide sur Process.destroy()
    Par rampageXT dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2007, 14h38
  4. Demande d'aide sur XPDL (XML Process Definition Language)
    Par Bebert71 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/02/2006, 09h23
  5. [VB.NET]Aide sur les process
    Par Dnx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo