Pool map avec plusieurs arguments en Python

Muhammad Waiz Khan 30 janvier 2023
  1. Exécution de fonctions parallèles à l’aide de la méthode pool.map()
  2. Exécution de fonctions parallèles avec plusieurs arguments à l’aide de la méthode pool.starmap()
Pool map avec plusieurs arguments en Python

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