Tareas asíncronas con Pool.apply_async()
Además de map()
, la clase multiprocessing.Pool()
proporciona otro método para ejecutar procesos en paralelo llamado apply_async()
. Este método te permite enviar una llamada de función a un grupo de procesos y continuar la ejecución inmediatamente sin esperar por el resultado. En cambio, puedes usar una función de devolución de llamada para recuperar el resultado de la llamada de función cuando esté listo.
Complete slow_square.py
.
import multiprocessing
import time
def slow_square(x):
time.sleep(1)
return x * x
def callback(result):
print(result)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = [pool.apply_async(slow_square, (x,), callback=callback) for x in range(10)]
for result in results:
result.wait()
print("All tasks completed.")
En este ejemplo, definimos una función slow_square()
que toma un número x, espera un segundo y luego devuelve el cuadrado de x. También definimos una función de devolución de llamada callback()
que simplemente imprime el resultado cuando esté disponible.
Luego creamos un grupo de cuatro procesos y usamos apply_async()
para enviar una llamada de función al grupo para cada número en el rango de 0 a 9. Pasamos la función slow_square()
y el argumento x usando el parámetro args
, y también especificamos la función de devolución de llamada que se llamará cuando el resultado esté listo.
Luego recorremos la lista de resultados y llamamos a result.wait()
para bloquear el hilo principal hasta que el resultado esté listo. Finalmente, imprimimos un mensaje para indicar que todas las tareas se han completado.