|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 514 ![]() |
Salut,
Compte tenu du nombre important de threads à ce sujet, j'ouvre un thread concacré à ce souci de parallelisation de job en perl. Ce serait bien que chacun participe en donnant des exemples de scripts propres et commentés avec l'utilisation des threads, des fork et autres modules pour le lancement de jobs en paralelle. Ce serait bien aussi d'avoir une idée des modules les plus utilisés et surtout les plus fiables avec leur compatibilité linux, windows, mac etc. Par la suite, j'essayerais de regrouper tout ça et le mettre au propre sur notre belle FAQ. N'ayant jamais été amené à utiliser cette technique, je suis bien évidemment intéressé et avec les petites recherches à ce sujet, j'ai déjà listé quelques modules intéressant que voici : - module thread : thread, thread::Shared (ici) - module parallel : Parallel::Simple, Parallel::Jobs, Parallel::Forker (ici) - module MPI : Parallel::MPI, Parallel::MPI::Simple, Parallel::Mpich::MPD ... (ici) Y en a surement d'autres. A vos claviers et exemples pour ceux qui s'y connaissent déjà bien. Merci de votre participation
__________________
|
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() |
Mon petit laïus sur threads
en premier compatibilité linux/windows: les threads fonctionnent sous les 2 OS, mais il faut avoir installer la version multithread, qui n'est pas forcement installée par défaut (ce qui a été mon cas sous linux). En cas de réinstallation il est à prévoir de recompiler/réinstaller certains modules (de mémoire j'ai du réinstaller DBI entre autres). Sous windows, avec ActivePerl 5.8.8 build 819, les threads sont installés par défaut. petit exemple de threading: Voila un petit script que j'utilise pour tester les fonctionnalités. Il est largement améliorable !! Code :
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() |
Attention Thread est le vieux (5.6) module pour les threads, le module actuel est "threads" qui n'utilise plus le même modèle, il est bien plus fiable. threads::shared permet de partager certaines variables et de poser des verrous, attention, tous les types de variables ne peuvent pas être partagés entre threads, en particulier un grand nombre de modules souffrent de ce fait (et d'autres problèmes plus répandus et liés au parallélisme lui-même) et ne sont pas adaptés à un usage multi-thread (n'oubliez pas que ceci est vrai dans beaucoup d'autres langages).
Un point qui diffère entre les threads de Perl et ceux d'autres langages est que par défaut rien n'est partagé entre les threads. Thread::Queue est sans doute l'un des modules les plus utiles pour véritablement travailler avec des threads, il permet d'envoyer des valeurs d'un thread à l'autre dans une file robuste. Thread::Semaphore fournit l'autre classique du parallélisme, c'est à dire le sémaphore. Ces deux modules sont dans le CORE. Thread::Appartment et PSiCHE semblent proposer une solution ambitieuse, mais qui requiert sans doute un temps d'adaptation. En attendant et avec un peu d'imagination, il n'est pas trop difficile de restreindre les modules qui ne sont pas thread-friendly à un seul thread et d'utiliser un système simple comme exposé dans ce post. -- Jedaï |
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 132 ![]() |
Venant de poster concernant justement le fork()
J'ajoute à mon tour ma contribution. Voici un code qui illustre fork() et l'utilisation de pipe() pour communiquer des enfants au père. Code perl :
|
||
|
|
00
|
|
|
#5 | ||||||
|
Nouveau Membre du Club
![]() Benjamin Étudiant Inscription : mai 2010 Messages : 148 ![]() |
Voici un exemple avec Parralel::ForkManager. CF ici
Code :
Code :
Code :
(Je suis un tout débutant en perl, si vous estimez que ce post ne sert pas ou n'est pas suffisamment pertinent, supprimez le, je ne vous en voudrai pas |
||||||
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 514 ![]() |
pour ce programme, toute participation est toujours appréciée .
__________________
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com