[Perl] Lancer une centaine de "threads" sous windows

Lancer une centaine de "threads" sous windows [Perl] - Perl - Programmation

Marsh Posté le 04-03-2004 à 13:47:50    

J'ai un script qui devra changer le mot de passe d'un user sur plusieurs centaines de pc. Pour éviter que celui-ci prennent plus de 30minutes, j'ai tenté de le forker.
 
Malheureusement, le fork() sous windows est limité à 64 semble t-il.
 
J'ai donc tenté d'utiliser la librairie threads, mais celle-ci est vachement lourde en mémoire, c'est à dire que la mémoire augmente à chaque threads lancé et ne diminue pas tant que tout le script n'est pas complété.
 

Code :
  1. open(FENT, $opts{"file"}) or die "Can't open " . $opts{"file"} . "\n";
  2.     foreach (<FENT> ) {
  3.       $_ =~ s/\n//g;
  4.       my $forked = async {user_change_password($_, $opts{"user"}, $opts{"old"}, $opts{"new"});}
  5.     }
  6.     close FENT;

Reply

Marsh Posté le 04-03-2004 à 13:47:50   

Reply

Marsh Posté le 04-03-2004 à 14:14:03    

Dans la doc il fait écrit que si on fait "detach" apres le thread, perl nettoie le thread quand il a terminé mais apparement ca ne fonctionne pas... g le meme probleme...

Reply

Marsh Posté le 04-03-2004 à 14:16:02    

le fork fonctionnait bien... mais s'arrete a 64  :sweat:

Reply

Marsh Posté le 04-03-2004 à 14:17:38    

beh oui c genant...

Reply

Marsh Posté le 04-03-2004 à 14:20:40    

Code :
  1. my $thread = threads->new(\&user_change_password, $_, $opts{"user"}, $opts{"old"}, $opts{"new"});
  2.       $thread->detach;


 
ca semble fonctionner à merveille, je stagne à 36mo alors quavant je montais jusqua 400!

Reply

Marsh Posté le 04-03-2004 à 14:27:27    

t'es sûr que ca stagne? paske moi ca ne fait qu'augmenter... petit à petit mais sûrement lol
Faut dire que tu en fais 100 mais apres c tout...
moi je les lance en boucle ttes les 5minutes

Reply

Marsh Posté le 04-03-2004 à 14:30:20    

jai fait le test sur 500
 
ca dépend combien de thread ton cpu est capable de prendre aussi
 
su un P3 900, je stagnais à 36mo
 
sur un quad Xeon 550, j'ai monté jusqua 60 environ mais ca restait stable

Reply

Marsh Posté le 04-03-2004 à 14:39:50    

C'est un p4 2.6Ghz donc je crois que ca va! ;o)
il ralenti pas du tout, c au niveau de la memoire, toutes les 5minutes la taille prise par l'interpreteur en memoire augmente... C pas très viable, mon programme devra tourner sans arret theoriquement pendant tres longtemps! Meme si le serveur sur lequel je vais l'installer a 2.5Go de memoire, apres meme pas un mois ca va etre saturé!

Reply

Marsh Posté le 04-03-2004 à 14:46:56    

Il vaut mieux eviter les thread et les fork sous windows, pour l'instant.
 
t'as pas le moyen de le faire en asynchrone?
 

Reply

Marsh Posté le 04-03-2004 à 14:56:10    

pospos a écrit :

Il vaut mieux eviter les thread et les fork sous windows, pour l'instant.
 
t'as pas le moyen de le faire en asynchrone?
 
 


 
async? c'est justement lui qui me mangeais toute ma mémoire. Avec threads et $threads->detach, tout va #1 après plusieurs essais sur quelques machines

Reply

Marsh Posté le 04-03-2004 à 14:56:10   

Reply

Marsh Posté le 04-03-2004 à 14:59:53    

non je parlais pas de cet async la
il vient d'ou d'ailleurs? (il vient d'ou? d'ailleurs?)


Message édité par pospos le 04-03-2004 à 15:00:03
Reply

Marsh Posté le 04-03-2004 à 22:52:24    

pospos a écrit :

non je parlais pas de cet async la
il vient d'ou d'ailleurs? (il vient d'ou? d'ailleurs?)


 
j'avais trouvé ca, avec un use de threads, on peut utiliser un truc du genre
 
my $child_thread = asyn { put your code };


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed