Multiprocesamiento y memoria de Python.

estoy usandomultiprocessing.imap_unordered para realizar un cálculo en una lista de valores:

def process_parallel(fnc, some_list):
    pool = multiprocessing.Pool()
    for result in pool.imap_unordered(fnc, some_list):
        for x in result:
            yield x
    pool.terminate()

Cada llamada afnc devuelve un objeto ENORME como resultado, por diseño. Puedo almacenar N instancias de tal objeto en la RAM, donde N ~ cpu_count, pero no mucho más (no cientos).

Ahora, usar esta función requiere demasiada memoria. La memoria se gasta por completo en el proceso principal, no en los trabajadores.

Cómoimap_unordered almacenar los resultados terminados? Me refiero a los resultados que ya fueron devueltos por los trabajadores pero que aún no se han transmitido al usuario. Pensé que era inteligente y solo los computé "perezosamente" según fuera necesario, pero aparentemente no.

Parece que ya no puedo consumir los resultados deprocess_parallel Lo suficientemente rápido, la piscina mantiene en cola estos enormes objetos desdefnc En algún lugar, internamente, y luego explota. Hay alguna manera de evitar esto? ¿Limitar su cola interna de alguna manera?

Estoy usando Python2.7. Aclamaciones.

Respuestas a la pregunta(2)

Su respuesta a la pregunta