Multiprocessamento e memória do Python

estou usandomultiprocessing.imap_unordered para executar um cálculo em uma 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 chamada parafnc retorna um objeto ENORME como resultado, por design. Eu posso armazenar N instâncias de tal objeto na RAM, onde N ~ cpu_count, mas não muito mais (não centenas).

Agora, usar esta função ocupa muita memória. A memória é inteiramente gasta no processo principal, não nos trabalhadores.

Como é queimap_unordered armazenar os resultados acabados? Quero dizer, os resultados que já foram retornados pelos trabalhadores, mas ainda não foram repassados ​​ao usuário. Eu pensei que era inteligente e só os computava "preguiçosamente" quando necessário, mas aparentemente não.

Parece que não posso consumir os resultados deprocess_parallel rápido o suficiente, a piscina continua enfileirando esses objetos enormes defnc em algum lugar, internamente, e depois explode. Há alguma maneira de evitar isto? Limitar sua fila interna de alguma forma?

Estou usando o Python2.7. Felicidades.

questionAnswers(2)

yourAnswerToTheQuestion