Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/06/2018, à 15:01

Kovalle

[Résolu] Multiprocessing python

Bonjour à tous ! smile

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 hmm
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 ! smile

Hors ligne