OVH Cloud OVH Cloud

threads : des conseils

6 réponses
Avatar
ernond_paul
Bonjour,

Je souhaite faire le script suivant :

- initialiser 1 tableau contenant des urls.
- lancer simultan=E9ment 3 processus qui vont chacun t=E9l=E9charger 1 url =
de
la liste.

Je souhaite avoir toujours 3 processus (donc avec une file d'attente) :
d=E8s qu'une url est t=E9l=E9charg=E9e, alors son processus est termin=E9 (=
ferm=E9),
ce qui va permettre l'ouverture d'un nouveau processus.

J'ai essay=E9 de g=E9rer cela avec des threads mais au bout d'un moment,
j'obtiens une saturation m=E9moire.

Que me conseillez-vous ? (en Perl, et dans la mesure du possible :
portable, je suis sous linux mais... ...)

Merci.

6 réponses

Avatar
Denis -esp2008-
Bonjour,

Je souhaite faire le script suivant :

- initialiser 1 tableau contenant des urls.
- lancer simultanément 3 processus qui vont chacun télécharger 1 url > de
la liste.


Ceci vient d'être discuté ici, cf. la discussion "lancer N processus sur
M" (ou un titre approchant).

Bonne chance,

--
Denis

Avatar
Paul Gaborit
À (at) 4 Feb 2005 05:43:50 -0800,
(Paul) écrivait (wrote):
Je souhaite faire le script suivant :

- initialiser 1 tableau contenant des urls.
- lancer simultanément 3 processus qui vont chacun télécharger 1 url > de la liste.

Je souhaite avoir toujours 3 processus (donc avec une file d'attente) :
dès qu'une url est téléchargée, alors son processus est terminé ( > fermé),
ce qui va permettre l'ouverture d'un nouveau processus.

J'ai essayé de gérer cela avec des threads mais au bout d'un moment,
j'obtiens une saturation mémoire.

Que me conseillez-vous ? (en Perl, et dans la mesure du possible :
portable, je suis sous linux mais... ...)


Pour ce besoin tout à fait particulier, il existe le module LWP::Parallel qui
répond exactement (il est tout à fait portable).

On peut aussi tenter le multi-thread ou le multi-processus (ce n'est pas du
tout la même approche). Ce sera dur de faire complètement portable dans le cas
multi-processus. Ce sera dur de faire du multi-thread si vous ne maîtrisez pas
toutes les implications de ce choix (le support du multi-thread est encore
expériemental).

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Patrick Mevzek
- lancer simultanément 3
processus qui vont chacun télécharger 1 url = de la liste.


Cf l'article ``A forking parallel link checker'' de Randal L. Schwartz
sur http://www.stonehenge.com/merlyn/LinuxMag/col16.html

Ou sinon une introduction à POE, ``Doing many things at once''
http://www.stonehenge.com/merlyn/LinuxMag/col41.html

POE étant, en *très* simplifié, un framework Perl permettant d'avoir
l'équivalent de threads sans aucun support dans l'OS, mais c'est du
multitache collaboratif, alors qu'une solution basée sur fork comme la
précédente, est en préemptif.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
Emmanuel Florac
Le Fri, 04 Feb 2005 05:43:50 -0800, Paul a écrit :


Que me conseillez-vous ? (en Perl, et dans la mesure du possible :
portable, je suis sous linux mais... ...)


Sous Linux l'utilisation des threads perl est une plaie. Mieux vaut forker...

--
Si non confectus non reficiat.

Avatar
Manu
Emmanuel Florac wrote:


Que me conseillez-vous ? (en Perl, et dans la mesure du possible :
portable, je suis sous linux mais... ...)



Sous Linux l'utilisation des threads perl est une plaie. Mieux vaut forker...



use threads;


Avatar
Jérémy JUST
On Fri, 04 Feb 2005 21:44:08 GMT
Manu wrote:

Sous Linux l'utilisation des threads perl est une plaie. Mieux vaut
forker...


use threads;


Ouais, c'est pas parce qu'on sait écrire le pragma qu'on s'en sert
avec facilité.
J'appuie le propos d'Emmanuel: si les processus n'ont pas à partager
de données en mémoire, il est beaucoup plus simple (et souvent
économique) de forker.

Or, en l'occurrence, je n'ai pas l'impression que les processus
partagent grand chose ici (ils partent chacun avec leur URL sous le
bras et ils s'en occupent dans leur coin).

--
Jérémy JUST