multiprocesamiento con grandes datos

estoy usandomultiprocessing.Pool() para paralelizar algunos cálculos pesados.

La función de destino devuelve una gran cantidad de datos (una lista enorme). Me estoy quedando sin memoria RAM.

Sinmultiprocessing, Acabo de cambiar la función de destino en un generador, poryieldIngresando los elementos resultantes uno tras otro, a medida que se calculan.

Entiendo que el multiprocesamiento no es compatible con los generadores: espera toda la salida y la devuelve de inmediato, ¿verdad? No ceder. ¿Hay alguna manera de hacer elPool los trabajadores obtienen datos tan pronto como están disponibles, sin construir la matriz de resultados completa en la RAM?

Ejemplo simple:

def target_fnc(arg):
   result = []
   for i in xrange(1000000):
       result.append('dvsdbdfbngd') # <== would like to just use yield!
   return result

def process_args(some_args):
    pool = Pool(16)
    for result in pool.imap_unordered(target_fnc, some_args):
        for element in result:
            yield element

Esto es Python 2.7.

Respuestas a la pregunta(3)

Su respuesta a la pregunta