Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
azrazer
Bonjour, la syntaxe pour l'appel d'un sub action1 est action1(); , il faut essayer d'éviter la syntaxe &action1; qui est maintenant obsolète. (pour référence https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand , par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions" rendrait le code plus performant ??? (pourquoi ?)
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Cordialement,
azra.
Le 06/01/2012 05:37, Chloe Sival a écrit :
Bonjour,
Je sollicite une nouvelle fois votre aide pour essayer d'optimiser mon script perl.
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Donc j'execute le sub action1, attends qu'il finisse, execute l'action2, attends qu'il finisse etc et au final je traite les resultats.
Mon petit soucis est que chaque action prends une dizaine de seconde et non pas de lien l'une vers l'autre.
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
quelqu'un a une idée de comment faire ? j'ai commencé a lire sur les threads mais pas évident ..
merci d'avance Chloe
Bonjour,
la syntaxe pour l'appel d'un sub action1 est action1(); , il faut
essayer d'éviter la syntaxe &action1; qui est maintenant obsolète.
(pour référence
https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand ,
par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions"
rendrait le code plus performant ??? (pourquoi ?)
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison
que l'execution des 3 actions prenne moins de 30 secondes (à ressources
constantes) qu'on utilise du multithread ou non ... si ???
Cordialement,
azra.
Le 06/01/2012 05:37, Chloe Sival a écrit :
Bonjour,
Je sollicite une nouvelle fois votre aide pour essayer d'optimiser mon
script perl.
J'ai donc un script qui s'execute normalement, pour le moment, ma
logique est du style :
#!/usr/bin/perl
&action1;
&action2;
&action3;
&traitement
Donc j'execute le sub action1, attends qu'il finisse, execute l'action2,
attends qu'il finisse etc et au final je traite les resultats.
Mon petit soucis est que chaque action prends une dizaine de seconde
et non pas de lien l'une vers l'autre.
Je voudrais "exécuter" simultanément les trois "&actionsX" et que
&traitement s’exécute ensuite quand les trois actions auront fini
leur jobs.
quelqu'un a une idée de comment faire ?
j'ai commencé a lire sur les threads mais pas évident ..
Bonjour, la syntaxe pour l'appel d'un sub action1 est action1(); , il faut essayer d'éviter la syntaxe &action1; qui est maintenant obsolète. (pour référence https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand , par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions" rendrait le code plus performant ??? (pourquoi ?)
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Cordialement,
azra.
Le 06/01/2012 05:37, Chloe Sival a écrit :
Bonjour,
Je sollicite une nouvelle fois votre aide pour essayer d'optimiser mon script perl.
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Donc j'execute le sub action1, attends qu'il finisse, execute l'action2, attends qu'il finisse etc et au final je traite les resultats.
Mon petit soucis est que chaque action prends une dizaine de seconde et non pas de lien l'une vers l'autre.
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
quelqu'un a une idée de comment faire ? j'ai commencé a lire sur les threads mais pas évident ..
merci d'avance Chloe
Nicolas George
azrazer , dans le message <je6eq6$449$, a écrit :
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Si les actions sont limitées par la même ressource, oui. Et encore, dans le cas du CPU, à condition de ne pas avoir entendu parler de CPU multucoeurs.
Si les actions sont limitées par des ressources différentes, genre une le CPU, l'autre le disque, et deux autres la réactivité réseau de deux sites distincts, alors non, pas du tout.
azrazer , dans le message <je6eq6$449$1@speranza.aioe.org>, a écrit :
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison
que l'execution des 3 actions prenne moins de 30 secondes (à ressources
constantes) qu'on utilise du multithread ou non ... si ???
Si les actions sont limitées par la même ressource, oui. Et encore, dans le
cas du CPU, à condition de ne pas avoir entendu parler de CPU multucoeurs.
Si les actions sont limitées par des ressources différentes, genre une le
CPU, l'autre le disque, et deux autres la réactivité réseau de deux sites
distincts, alors non, pas du tout.
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Si les actions sont limitées par la même ressource, oui. Et encore, dans le cas du CPU, à condition de ne pas avoir entendu parler de CPU multucoeurs.
Si les actions sont limitées par des ressources différentes, genre une le CPU, l'autre le disque, et deux autres la réactivité réseau de deux sites distincts, alors non, pas du tout.
Jean-Louis Morel
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
Un script simpliste :
#!/usr/bin/perl use strict; use warnings; use threads; use Time::HiRes qw( time );
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma
logique est du style :
#!/usr/bin/perl
&action1;
&action2;
&action3;
&traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que
&traitement s’exécute ensuite quand les trois actions auront fini
leur jobs.
Un script simpliste :
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use Time::HiRes qw( time );
my $thread1 = threads->create(&action1);
my $thread2 = threads->create(&action2);
my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join;
$thread2->join;
$thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1
Début thread 2
Début thread 3
Fin thread 2
Fin thread 1
Fin thread 3
time .0276210308075
On voit que le temps d'exécution du script est proche du temps
d'exécution du thread le plus long : c'est toujours comme ça quand on
fait roupiller les threads ;-)
Avec de vraies "actions", c'est beaucoup moins favorable.
Essayez avec vos routines actions et chronométrez pour voir si ça vaut
le coup d'utiliser des threads.
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
Chloe Sival
Le 06/01/2012 10:27, azrazer a écrit :
Bonjour, la syntaxe pour l'appel d'un sub action1 est action1(); , il faut essayer d'éviter la syntaxe &action1; qui est maintenant obsolète. (pour référence https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand , par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions" rendrait le code plus performant ??? (pourquoi ?)
Oui, car le delais n'est pas du aux ressources internes de la machine qui execute le script mais a la machine distante, hors les trois actions dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme temps via un .sh et cela a bien été traité en moins de 10s
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Cordialement,
azra.
Le 06/01/2012 10:27, azrazer a écrit :
Bonjour,
la syntaxe pour l'appel d'un sub action1 est action1(); , il faut
essayer d'éviter la syntaxe &action1; qui est maintenant obsolète.
(pour référence
https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand ,
par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions"
rendrait le code plus performant ??? (pourquoi ?)
Oui, car le delais n'est pas du aux ressources internes de la machine
qui execute le script mais a la machine distante, hors les trois actions
dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme
temps via un .sh et cela a bien été traité en moins de 10s
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison
que l'execution des 3 actions prenne moins de 30 secondes (à ressources
constantes) qu'on utilise du multithread ou non ... si ???
Bonjour, la syntaxe pour l'appel d'un sub action1 est action1(); , il faut essayer d'éviter la syntaxe &action1; qui est maintenant obsolète. (pour référence https://www.socialtext.net/perl5/subroutines_called_with_the_ampersand , par exemple...)
Pensez-vous réellement que l'execution en parallèle des 3 "actions" rendrait le code plus performant ??? (pourquoi ?)
Oui, car le delais n'est pas du aux ressources internes de la machine qui execute le script mais a la machine distante, hors les trois actions dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme temps via un .sh et cela a bien été traité en moins de 10s
A priori si chaque "action" prend 10 secondes, il n'y a pas de raison que l'execution des 3 actions prenne moins de 30 secondes (à ressources constantes) qu'on utilise du multithread ou non ... si ???
Cordialement,
azra.
Chloe Sival
Merci beaucoup je vais essayer
Le 06/01/2012 18:35, Jean-Louis Morel a écrit :
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
Un script simpliste :
#!/usr/bin/perl use strict; use warnings; use threads; use Time::HiRes qw( time );
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
Merci beaucoup je vais essayer
Le 06/01/2012 18:35, Jean-Louis Morel a écrit :
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma
logique est du style :
#!/usr/bin/perl
&action1;
&action2;
&action3;
&traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que
&traitement s’exécute ensuite quand les trois actions auront fini
leur jobs.
Un script simpliste :
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use Time::HiRes qw( time );
my $thread1 = threads->create(&action1);
my $thread2 = threads->create(&action2);
my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join;
$thread2->join;
$thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1
Début thread 2
Début thread 3
Fin thread 2
Fin thread 1
Fin thread 3
time .0276210308075
On voit que le temps d'exécution du script est proche du temps
d'exécution du thread le plus long : c'est toujours comme ça quand on
fait roupiller les threads ;-)
Avec de vraies "actions", c'est beaucoup moins favorable.
Essayez avec vos routines actions et chronométrez pour voir si ça vaut
le coup d'utiliser des threads.
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
azrazer
Bonjour, D'accord, dans ce cas là [: (je pensais le problème simple se réduisant à l'execution d'un script sur une machine isolée) désolé. azrA.
Oui, car le delais n'est pas du aux ressources internes de la machine qui execute le script mais a la machine distante, hors les trois actions dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme temps via un .sh et cela a bien été traité en moins de 10s
Bonjour,
D'accord, dans ce cas là [:
(je pensais le problème simple se réduisant à l'execution d'un script
sur une machine isolée)
désolé.
azrA.
Oui, car le delais n'est pas du aux ressources internes de la machine
qui execute le script mais a la machine distante, hors les trois actions
dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme
temps via un .sh et cela a bien été traité en moins de 10s
Bonjour, D'accord, dans ce cas là [: (je pensais le problème simple se réduisant à l'execution d'un script sur une machine isolée) désolé. azrA.
Oui, car le delais n'est pas du aux ressources internes de la machine qui execute le script mais a la machine distante, hors les trois actions dialogue avec des machines differentes.
J'ai fais un test simple:
J'ai fait trois script perl, un par action, et je les ai executé en meme temps via un .sh et cela a bien été traité en moins de 10s
Chloe Sival
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de 10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de temps que de les lancer l'un apres l autre alors que les ressources machines sont largement sous exploité
snifff
Le 06/01/2012 18:35, Jean-Louis Morel a écrit :
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
Un script simpliste :
#!/usr/bin/perl use strict; use warnings; use threads; use Time::HiRes qw( time );
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de
10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de
temps que de les lancer l'un apres l autre alors que les ressources
machines sont largement sous exploité
snifff
Le 06/01/2012 18:35, Jean-Louis Morel a écrit :
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma
logique est du style :
#!/usr/bin/perl
&action1;
&action2;
&action3;
&traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que
&traitement s’exécute ensuite quand les trois actions auront fini
leur jobs.
Un script simpliste :
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use Time::HiRes qw( time );
my $thread1 = threads->create(&action1);
my $thread2 = threads->create(&action2);
my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join;
$thread2->join;
$thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1
Début thread 2
Début thread 3
Fin thread 2
Fin thread 1
Fin thread 3
time .0276210308075
On voit que le temps d'exécution du script est proche du temps
d'exécution du thread le plus long : c'est toujours comme ça quand on
fait roupiller les threads ;-)
Avec de vraies "actions", c'est beaucoup moins favorable.
Essayez avec vos routines actions et chronométrez pour voir si ça vaut
le coup d'utiliser des threads.
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de 10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de temps que de les lancer l'un apres l autre alors que les ressources machines sont largement sous exploité
snifff
Le 06/01/2012 18:35, Jean-Louis Morel a écrit :
Le 06/01/2012 05:37, Chloe Sival a écrit :
J'ai donc un script qui s'execute normalement, pour le moment, ma logique est du style :
#!/usr/bin/perl
&action1; &action2; &action3; &traitement
Je voudrais "exécuter" simultanément les trois "&actionsX" et que &traitement s’exécute ensuite quand les trois actions auront fini leur jobs.
Un script simpliste :
#!/usr/bin/perl use strict; use warnings; use threads; use Time::HiRes qw( time );
my $thread1 = threads->create(&action1); my $thread2 = threads->create(&action2); my $thread3 = threads->create(&action3);
# attente que chaque thread se termine (et nettoyage)
$thread1->join; $thread2->join; $thread3->join;
my $end = time(); # top d'arrivée
print "time =", $end-$start, "n";
__END__
Sur ma machine, j'obtiens:
Début thread 1 Début thread 2 Début thread 3 Fin thread 2 Fin thread 1 Fin thread 3 time .0276210308075
On voit que le temps d'exécution du script est proche du temps d'exécution du thread le plus long : c'est toujours comme ça quand on fait roupiller les threads ;-) Avec de vraies "actions", c'est beaucoup moins favorable. Essayez avec vos routines actions et chronométrez pour voir si ça vaut le coup d'utiliser des threads.
HTH
-- J-L http://www.bribes.org/perl/
espie
In article <4f0b4867$0$30736$, Chloe Sival wrote:
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de 10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de temps que de les lancer l'un apres l autre alors que les ressources machines sont largement sous exploité
snifff
Es-tu sure d'avoir des "vrais" threads sur ton systeme, et que tes trois actions s'executent reellement en meme temps ?
essaie sur un truc plus simple pour verifier que tu as bien du parallelisme.
In article <4f0b4867$0$30736$426a74cc@news.free.fr>,
Chloe Sival <chloe.sival@gmail.com> wrote:
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de
10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de
temps que de les lancer l'un apres l autre alors que les ressources
machines sont largement sous exploité
snifff
Es-tu sure d'avoir des "vrais" threads sur ton systeme, et que tes
trois actions s'executent reellement en meme temps ?
essaie sur un truc plus simple pour verifier que tu as bien du
parallelisme.
Bon ba a premiere vu cela n'apporte rien, au contraire cela allonge de 10 secondes ..
c'est etonnant car en executant en meme temps deux sub cela mets plus de temps que de les lancer l'un apres l autre alors que les ressources machines sont largement sous exploité
snifff
Es-tu sure d'avoir des "vrais" threads sur ton systeme, et que tes trois actions s'executent reellement en meme temps ?
essaie sur un truc plus simple pour verifier que tu as bien du parallelisme.