Pages : 1
#1 Le 06/06/2018, à 15:01
- Kovalle
[Résolu] Multiprocessing python
Bonjour à tous !
Je me permets de créer ce post car je souhaite paralléliser des calculs en python, et j'ai du mal à m'en sortir^^
L'idée : c'est qu'avec une fonction déjà codée, je simule le comportement d'une particule, et qu'à la fin cette fonction me retourne un résultat sous forme de valeur numérique.
Néanmoins mon besoin c'est d'étudier le comportement d'un maximum de particule (indépendamment les unes des autres), et donc d’exécuter cette même fonction un maximum de fois, en un temps "optimal" d'où mon souhait que celle-ci soit exécutée sur plusieurs cœurs en parallèle.
Du coup à aujourd'hui mon code c'est "en gros" cette simple boucle :
N = 10e6 #nombre de particules à étudier
for i in range(0, N):
resultat += simu_particule()
resultat_final = resultat / N
Ce que j'aimerais faire, si cela est possible, ce serait par exemple qu'un cœur se charge de faire la moitié des simulations, et un autre l'autre moitié (en parallèle), puis compiler les résultats des deux. (ou idem sur 3 cœurs ou plus^^)
J'ai l'impression que c'est "simple" mais quand je regarde de la doc je suis perdu
Pouvez-vous me dire si cela semble faisable ? et comment dois-je m'y prendre s'il vous plaît ? Merci d'avance !
Dernière modification par Kovalle (Le 12/06/2018, à 08:17)
Hors ligne
#2 Le 11/06/2018, à 14:17
- grim7reaper
Re : [Résolu] Multiprocessing python
Salut,
Si je prends ton code d'exemple un peu adapté :
#!/usr/bin/env python
# coding: utf-8
def simu_particule(n):
return n
N = 10_000_000 #nombre de particules à étudier
resultat = 0
for i in range(0, N):
resultat += simu_particule(i)
print(resultat / N)
Pour le faire s’exécuter sur plusieurs cœurs c’est assez simple en utilisant un pool de workers.
#!/usr/bin/env python
# coding: utf-8
from multiprocessing import Pool
def simu_particule(n):
return n
N = 10_000_000 #nombre de particules à étudier
pool = Pool(processes=4)
resultat = sum(pool.map(simu_particule, range(0, N)))
print(resultat / N)
Dansd cette exemple, le code est réparti entre 4 processus.
Hors ligne
#3 Le 12/06/2018, à 08:15
- Kovalle
Re : [Résolu] Multiprocessing python
Merci beaucoup, c'est exactement ce que je recherche !
(Jusqu'à maintenant j'essayais d'utiliser process() et start() mais j'arrivais pas exactement à faire ce que je voulais)
Merci encore !
Hors ligne