Pool Map Con Múltiples Argumentos en Python
-
Ejecución de funciones en paralelo usando el método
pool.map()
-
Ejecución de funciones en paralelo con múltiples argumentos utilizando el método
pool.starmap()
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