Многопроцессорность и память Python
я используюmultiprocessing.imap_unordered
выполнить вычисления по списку значений:
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()
Каждый звонокfnc
возвращает ОГРОМНЫЙ объект в результате, по замыслу. Я могу хранить N экземпляров такого объекта в оперативной памяти, где N ~ cpu_count, но не намного (не сотни).
Теперь использование этой функции занимает слишком много памяти. Память целиком и полностью расходуется на основной процесс, а не на рабочих.
Какimap_unordered
сохранить готовые результаты? Я имею в виду результаты, которые уже были возвращены работниками, но еще не переданы пользователю. Я думал, что это было умно и только вычислил их "лениво" по мере необходимости, но, видимо, нет.
Похоже, так как я не могу потреблять результатыprocess_parallel
достаточно быстро, бассейн продолжает стоять в очереди эти огромные объекты изfnc
где-то внутри, а потом взрывается. Есть ли способ избежать этого? Ограничить свою внутреннюю очередь как-нибудь?
Я использую Python2.7. Приветствия.