Wieloprocesowość i pamięć Pythona

ja używammultiprocessing.imap_unordered wykonać obliczenia na liście wartości:

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()

Każde połączenie dofnc w rezultacie zwraca OGROMNY obiekt według projektu. Mogę przechowywać N instancji takiego obiektu w pamięci RAM, gdzie N ~ cpu_count, ale niewiele więcej (nie setki).

Teraz korzystanie z tej funkcji zajmuje zbyt dużo pamięci. Pamięć jest całkowicie wykorzystywana w głównym procesie, a nie w robotnikach.

Jakimap_unordered zapisać gotowe wyniki? Mam na myśli wyniki, które zostały już zwrócone przez pracowników, ale nie zostały jeszcze przekazane użytkownikowi. Myślałem, że jest sprytny i obliczył je „leniwie” w razie potrzeby, ale najwyraźniej nie.

Wygląda na to, że nie mogę konsumować wynikówprocess_parallel wystarczająco szybko, basen wciąż ustawia te ogromne obiekty w kolejcefnc gdzieś, wewnętrznie, a potem wybuchnie. Czy istnieje sposób, aby tego uniknąć? Jakoś ograniczyć kolejkę wewnętrzną?

Używam Python2.7. Twoje zdrowie.

questionAnswers(2)

yourAnswerToTheQuestion