У меня есть код с использованием многопроцессорного пула Python.Но он использует чрезмерную память.Я проверил как pool.map, так и pool.imap_unordered, однако оба использовали одинаковый объем памяти.Ниже приведена упрощенная версия моего кода.
import random, time, multiprocessing
def func(arg):
y = arg**arg # Don't look into here because my original function is
# much complicated and I can't change anything here.
print y
p = multiprocessing.Pool(24)
count = 0
start = time.time()
for res in p.imap_unordered(func, range(48000), chunksize=2):
#for res in p.map(func, range(48000), chunksize=2):
print "[%5.2f] res:%s count:%s"%(time.time()-start, res, count)
count += 1
Функция сохраняет выходные данные в файлы и не имеет оператора возврата.Вышеприведенный код занял:-час: 00:10:02, используемая память: 161,16 МБ
У меня всего 128 ГБ памяти, и мой исходный код останавливается из-за превышения памяти.И map, и imap_unordered показывают ту же проблему.Я ожидал, что imap_unordered займет гораздо меньше памяти.Что я должен изменить, чтобы уменьшить потребление памяти без изменения функции (оригинальной)?