Pool map avec plusieurs arguments en Python
-
Exécution de fonctions parallèles à l’aide de la méthode
pool.map()
-
Exécution de fonctions parallèles avec plusieurs arguments à l’aide de la méthode
pool.starmap()
Cet article explique différentes méthodes pour effectuer l’exécution de fonctions parallèles à l’aide du module multiprocessing
de Python.
Le module multiprocessing
fournit les fonctionnalités permettant d’exécuter des fonctions parallèles avec plusieurs entrées et de répartir les données d’entrée sur différents processus.
Nous pouvons paralléliser l’exécution de la fonction avec différentes valeurs d’entrée en utilisant les méthodes suivantes en Python.
Exécution de fonctions parallèles à l’aide de la méthode pool.map()
La méthode pool.map(function, iterable)
renvoie un itérateur qui applique la function
fournie en entrée à chaque élément de l’entrée iterable
. Par conséquent, si nous voulons effectuer une exécution parallèle de la function
avec différentes entrées, nous pouvons utiliser la méthode pool.map()
.
L’exemple de code ci-dessous montre comment utiliser la méthode pool.map()
pour paralléliser l’exécution de la fonction en Python.
from multiprocessing import Pool
def myfunc(x):
return 5 + x
if __name__ == "__main__":
with Pool(3) as p:
print(p.map(myfunc, [1, 2, 3]))
Production :
[6, 7, 8]
Si l’entrée function
a plusieurs arguments, nous pouvons exécuter la fonction en parallèle en utilisant la méthode pool.map()
et la fonction partial()
avec elle.
L’exemple ci-dessous montre comment paralléliser l’exécution de la fonction avec plusieurs arguments à l’aide de pool.map()
en Python.
from multiprocessing import Pool
from functools import partial
def multiply(x, y):
print(x * y)
if __name__ == "__main__":
with Pool(3) as p:
p.map(partial(multiply, 5), [1, 2, 3])
Production :
5
10
15
Comme on peut le remarquer dans l’exemple ci-dessus, le défaut de cette méthode est qu’on ne peut pas changer la valeur du premier argument.
Exécution de fonctions parallèles avec plusieurs arguments à l’aide de la méthode pool.starmap()
Si nous voulons exécuter une fonction en parallèle avec plusieurs arguments, nous pouvons le faire en utilisant la méthode pool.starmap(function, iterable)
.
Comme la méthode pool.map(function, iterable)
, la méthode pool.starmap(fonction, itérable)
retourne un itérateur qui applique la function
fournie en entrée à chaque élément de iterable
. Néanmoins, il s’attend à ce que chaque élément d’entrée iterable
soit organisé en arguments d’entrée function
itérables.
En utilisant la méthode pool.starmap()
, nous pouvons fournir des valeurs différentes à tous les arguments de la function
, contrairement à la méthode pool.map()
.
Nous pouvons effectuer une exécution de fonction parallèle avec plusieurs arguments en Python en utilisant la méthode pool.starmap()
de la manière suivante.
from multiprocessing import Pool
def print_name(name, lname):
print("full name =", name, lname)
if __name__ == "__main__":
with Pool(3) as p:
p.starmap(print_name, [("Thomas", "Scott"), ("Ali", "Khan")])
Production :
full name = Thomas Scott
full name = Ali Khan