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 :

Threads et MySQL comment passer un argument.


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Threads et MySQL comment passer un argument.
    Salut à tous ! Désolé d'avance si ma question est triviale. Je vous explique en gros le problème. J'aimerais lancer X threads qui réalise une connection telnet chacun sur un élément, récupère des infos et les place dans une base de données.

    J'ai bien essayé de créer une connection à la base de données dans chaque thread mais après Y threads il y a trop de connexion et tout foire. J'aimerais donc créer la connexion dans le main et passer la structure de la connexion mysql dans chaque thread pour ne faire qu'une seule connexion. Cependant j'ai un sale message d'erreur.

    En fait j'ai ceci comme message d'erreur :
    Thread 1 terminated abnormally: DBD::mysql::db prepare failed: handle 2 is owned by thread 81dd008 not current thread 878e518 (handles can't be shared between threads and your driver may need a CLONE method added) at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/Mysql.pm line 161, <LOGTEL> line 29.
    Auriez-vous une idée de comment règler le problème ? Je vous remercie d'avance pour toute aide.



    Voici le code :

    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
    35
    36
    37
    38
    39
    40
     
     
    #Thread qui sera créé.
    sub thr_sw {
    	my @Parametres = @_;
    	#$dbh_tel = $Parametres[0];
    	$ip = $Parametres[0];
    	$nom_switch= $Parametres[1];
    	my $dbh_tel_cp = $Parametres[2];
     
    ... tout le code de traitement (ce n'est pas plus qui pose problème).
     
    ... et ensuite les requêtes mysql pour ajouter des infos à la BD
    $stmt = "replace into `telephones` (`MAC`,`NUM_TEL`,`NOM`,`IP_TEL`,`ETAT`,`SWITCH`,`INTERFACE`,`DATE_MAJ`) values ('$mac','$numero','$nom_user','$iptel','$state','$nom_switch','$interf','$now');";
    $sth_tel = $dbh_tel_cp->query($stmt);
    }
     
    #main qui appelle le thread : on a créé avant la connexion à la BD
     
    #Connexion à la base de donnée téléphonies (une seule connexion donc une seule structure).
     
    $host="localhost";
    $database="telephonie";
    $user="xxxx";
    $password="yyyy";
    my $dbh_tel = Mysql->connect($host, $database, $user, $password);
     
    #on crée tous les threads en voulant leur passer l'objet mysql
    for(my $ii=0; $ii<$nblines; $ii++) {
    		$xx = 1;
    		@arr = $sth->fetchrow;
    		$ip = $arr[0];	
    		$nom_switch = $arr[1];
    		#my $dbh_tel_copy = clone($dbh_tel);  -----------------------> J'ai tenté le clone ... mais ça va pas
    		$thr[$i] = threads->new(\&thr_sw, $ip,$nom_switch,$dbh_tel); #je veux passer la structure de connexion mysql
    	}
    #Attente que tous les threads se finissent correctement.
    	for(my $ii=0; $ii<$nblines; $ii++) {
    		$thr[$i]->join;
    	}

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu peux essayer d'utiliser DBIx::Threaded, ça n'a pas été testé avec DBD::mysql à ma connaissance mais ça pourrait marcher.

    --
    Jedaï

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/08/2006, 13h32
  2. Réponses: 1
    Dernier message: 08/03/2006, 21h06
  3. Comment passer un argument a un programme et le recuperer
    Par Geant Vert dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/02/2006, 17h32
  4. Comment passer des argument a un script php ?
    Par Florina dans le forum Linux
    Réponses: 2
    Dernier message: 11/12/2005, 15h38
  5. Comment passer les arguments à un script perl
    Par belgampaul dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2005, 13h52

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