Pool Map Con Múltiples Argumentos en Python

Muhammad Waiz Khan 30 enero 2023
  1. Ejecución de funciones en paralelo usando el método pool.map()
  2. Ejecución de funciones en paralelo con múltiples argumentos utilizando el método pool.starmap()
Pool Map Con Múltiples Argumentos en Python

Este artículo explicará diferentes métodos para realizar la ejecución de funciones en paralelo utilizando el módulo multiprocessing en Python.

El módulo de multiprocessing proporciona las funcionalidades para realizar la ejecución de funciones en paralelo con múltiples entradas y distribuir los datos de entrada a través de diferentes procesos.

Podemos paralelizar la ejecución de la función con diferentes valores de entrada usando los siguientes métodos en Python.

Ejecución de funciones en paralelo usando el método pool.map()

El método pool.map(function, iterable) devuelve un iterador que aplica la function proporcionada como entrada a cada elemento de la entrada iterable. Por tanto, si queremos realizar la ejecución en paralelo de la function con diferentes entradas, podemos utilizar el método pool.map().

El siguiente código de ejemplo demuestra cómo usar el método pool.map() para paralelizar la ejecución de la función 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]))

Producción :

[6, 7, 8]

Si la function de entrada tiene múltiples argumentos, podemos ejecutar la función en paralelo usando el método pool.map() y la función partial() con él.

El siguiente ejemplo demuestra cómo paralelizar la ejecución de la función con múltiples argumentos usando 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])

Producción :

5
10
15

Como se puede notar en el ejemplo anterior, la desventaja de este método es que no podemos cambiar el valor del primer argumento.

Ejecución de funciones en paralelo con múltiples argumentos utilizando el método pool.starmap()

Si queremos ejecutar una función en paralelo con múltiples argumentos, podemos hacerlo usando el método pool.starmap(function, iterable).

Al igual que el método pool.map(function, iterable), el método pool.starmap(función, iterable) devuelve un iterador que aplica la function proporcionada como entrada a cada elemento del iterable. Aún así, espera que cada elemento de entrada iterable se organice como iterables de argumento de function de entrada.

Al usar el método pool.starmap() podemos proporcionar diferentes valores a todos los argumentos de la function, a diferencia del método pool.map().

Podemos realizar la ejecución de funciones paralelas con múltiples argumentos en Python usando el método pool.starmap() de la siguiente manera.

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")])

Producción :

full name = Thomas Scott
full name = Ali Khan

Artículo relacionado - Python Multiprocessing