чрезмерное использование памяти в многопроцессорном пуле - PullRequest
0 голосов
/ 24 января 2019

У меня есть код с использованием многопроцессорного пула 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 займет гораздо меньше памяти.Что я должен изменить, чтобы уменьшить потребление памяти без изменения функции (оригинальной)?

...