threading set_start_method parallel multiple ejemplos python-2.7 python-multiprocessing

python 2.7 - set_start_method - multiprocesamiento: map vs map_async



python pool map multiple arguments (1)

Hay cuatro opciones para asignar trabajos a procesos. Debe tener en cuenta los argumentos múltiples, la concurrencia, el bloqueo y el orden. map y map_asnyc solo difieren con respecto al bloqueo. map_async no es bloqueante mientras que el map está bloqueando

Así que digamos que tenías una función

from multiprocessing import Pool import time def f(x): print x*x if __name__ == ''__main__'': pool = Pool(processes=4) pool.map(f, range(10)) r = pool.map_async(f, range(10)) # DO STUFF print ''HERE'' print ''MORE'' r.wait() print ''DONE''

Ejemplo de salida:

0 1 9 4 16 25 36 49 64 81 0 HERE 1 4 MORE 16 25 36 9 49 64 81 DONE

pool.map(f, range(10)) esperará a que terminen las 10 llamadas de función, por lo que vemos todas las impresiones en una fila. r = pool.map_async(f, range(10)) los ejecutará de forma asíncrona y solo se bloqueará cuando se r.wait() así que vemos HERE y MORE pero DONE siempre estará al final.

¿Cuál es la diferencia entre usar map y map_async ? ¿No están ejecutando la misma función después de distribuir los elementos de la lista a 4 procesos?

Entonces, ¿es incorrecto suponer que ambos se ejecutan de forma asíncrona y paralela?

def f(x): return 2*x p=Pool(4) l=[1,2,3,4] out1=p.map(f,l) #vs out2=p.map_async(f,l)