Posté par Marotte ⛧ .
En réponse au message Multiprocessing.
Évalué à 2.
Dernière modification le 24 décembre 2016 à 18:04.
Ah oui, bien vu ! Mais du coup je ne comprends pas pourquoi la méthode 2. va plus vite que la méthode 1. (sauf si le temps de sommeil est le même pour tous les nourrissons, là les deux méthodes vont à la même vitesse (?!))
Évidemment pour faire ce que je veux je pourrais créé un seul pool... mais j’aimerais bien comprendre ce qu’il y a de différent entre 1. et 2.
Sinon j’ai compris comment utiliser l’objet Queue, qui me permet de lancer plusieurs processus en parallèle et de récupérer leurs résultats au fur et à mesure :
Le première colonne c’est la taille de la file (Queue), deuxième colonne l’index de l’item (qui correspond à l’ordre de lancement du process), en troisième colonne le temps pris par le process (temps de sleep()) et en quatrième colonne la valeur aléatoire générée par chaque process.
On peut voir que la taille de la file est importante au début... Voilà comment je le comprends : quand on fait le get() dans la deuxième boucle, on commence par le premier item, donc pendant qu’on attend ce premier process les suivants ont possiblement déjà terminé, venant s’enfiler dans queue.
On a les résultats « dans l’ordre logique », c’est à dire qu’on a les process qui prennent le plus de temps en dernier.
Avec cette dernière méthode le temps total ne dépasse pas le temps pris par le process qui dure le plus longtemps.
Par ailleurs j’ai également réussi à utiliser l’objet Manager, qui permet aussi de partager des variables, mais bon... un concept à la fois...
J’ai l’impression que pour un besoin donné il n’y a pas une seule bonne méthode et qu’en fait on a plutôt le choix, entre utiliser Pool, Queue, Manager, Process ou autre... j’ai encore du mal à bien voir quels sont les avantages et inconvénients de chacun.
```
[^] # Re: bug
Posté par Marotte ⛧ . En réponse au message Multiprocessing. Évalué à 2. Dernière modification le 24 décembre 2016 à 18:04.
Ah oui, bien vu ! Mais du coup je ne comprends pas pourquoi la méthode 2. va plus vite que la méthode 1. (sauf si le temps de sommeil est le même pour tous les nourrissons, là les deux méthodes vont à la même vitesse (?!))
Évidemment pour faire ce que je veux je pourrais créé un seul pool... mais j’aimerais bien comprendre ce qu’il y a de différent entre 1. et 2.
Sinon j’ai compris comment utiliser l’objet Queue, qui me permet de lancer plusieurs processus en parallèle et de récupérer leurs résultats au fur et à mesure :
Voici la sortie :
Le première colonne c’est la taille de la file (Queue), deuxième colonne l’index de l’item (qui correspond à l’ordre de lancement du process), en troisième colonne le temps pris par le process (temps de sleep()) et en quatrième colonne la valeur aléatoire générée par chaque process.
On peut voir que la taille de la file est importante au début... Voilà comment je le comprends : quand on fait le get() dans la deuxième boucle, on commence par le premier item, donc pendant qu’on attend ce premier process les suivants ont possiblement déjà terminé, venant s’enfiler dans queue.
On a les résultats « dans l’ordre logique », c’est à dire qu’on a les process qui prennent le plus de temps en dernier.
Avec cette dernière méthode le temps total ne dépasse pas le temps pris par le process qui dure le plus longtemps.
Par ailleurs j’ai également réussi à utiliser l’objet Manager, qui permet aussi de partager des variables, mais bon... un concept à la fois...
J’ai l’impression que pour un besoin donné il n’y a pas une seule bonne méthode et qu’en fait on a plutôt le choix, entre utiliser Pool, Queue, Manager, Process ou autre... j’ai encore du mal à bien voir quels sont les avantages et inconvénients de chacun.
```