¿Cuál es la diferencia entre el uso de map y map_async? Se que no se ejecuta la misma función después de la distribución de los elementos de la lista a 4 procesos?

Por lo tanto, es incorrecto suponer que ambos son asincrónicas en ejecución y en paralelo?

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)
No map devolver sólo una vez que el mapa se hace (es decir, de forma sincrónica, pero en paralelo), mientras que map_async devuelve de inmediato y permite la asignación se realiza en segundo plano (es decir, de forma asincrónica y en paralelo)?

OriginalEl autor aman | 2016-03-10

1 Comentario

  1. 47

    Hay cuatro opciones para la asignación de puestos de trabajo para los procesos. Usted tiene que considerar multi-args, la simultaneidad, el bloqueo, y los pedidos. map y map_asnyc sólo difieren con respecto al bloqueo. map_async no es el bloqueo de donde como map es el bloqueo de

    Así que digamos que tiene 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 todos los 10 de esas llamadas de función para terminar así que podemos ver todas las impresiones en una fila.
    r = pool.map_async(f, range(10)) va a ejecutar de forma asincrónica y solo bloque cuando r.wait() se llama así vemos HERE y MORE entre pero DONE siempre estará en la final.

    ok, así que si no tengo otras tareas que hacer al lado de la ejecución de la función f en la lista, a continuación, asignar y map_async son los mismos
    No del todo. Usted notará mapa se ejecutan en orden, pero map_async no
    Debe haber un print 'DONE' después de r.wait()?
    Sí no debe ser!
    Si el ejemplo anterior no devuelve resultados diferentes para map y map_async en la primera ejecución, trate de configurar range(500) o de algo grande.

    OriginalEl autor quikst3r

Dejar respuesta

Please enter your comment!
Please enter your name here