многопроцессорная обработка с большими данными

Я используюmultiprocessing.Pool() распараллелить некоторые тяжелые вычисления.

Функция target возвращает много данных (огромный список). У меня заканчивается ОЗУ.

БезmultiprocessingЯ бы просто изменил целевую функцию на генератор,yieldполучая полученные элементы один за другим по мере их вычисления.

Я понимаю, что многопроцессорная обработка не поддерживает генераторы - она ожидает весь вывод и возвращает его сразу, верно? Нет уступок. Есть ли способ сделатьPool рабочие выдают данные, как только они становятся доступными, не создавая весь массив результатов в оперативной памяти?

Простой пример:

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

Это Python 2.7.

Ответы на вопрос(3)

Ваш ответ на вопрос