Утечка памяти при использовании консервативной загрузки в python3 - PullRequest
1 голос
/ 28 октября 2019

Я несколько раз пытался загрузить большой файл с именем m.pkl (около 81M). После загрузки каждый раз использование памяти постоянно увеличивается. Но если я добавлю m = None перед загрузкой, использование памяти станет нормальным. Почему?

#!/usr/bin/env python

import pickle

from memory_profiler import profile

m = None


def do():
    global m
    # m = None
    with open('./m.pkl', 'rb') as f:
        m = pickle.load(f)


@profile
def main():
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()


main()

Line #    Mem usage    Increment   Line Contents
================================================
    17     12.1 MiB     12.1 MiB   @profile
    18                             def main():
    19    406.7 MiB    394.6 MiB       do()
    20    615.4 MiB    208.7 MiB       do()
    21    615.5 MiB      0.1 MiB       do()
    22    683.0 MiB     67.5 MiB       do()
    23    676.4 MiB      0.0 MiB       do()
    24    678.4 MiB      1.9 MiB       do()
    25    694.5 MiB     16.1 MiB       do()
    26    694.8 MiB      0.3 MiB       do()
    27    694.8 MiB      0.0 MiB       do()
    28    696.0 MiB      1.3 MiB       do()
    29    697.4 MiB      1.4 MiB       do()
    30    698.0 MiB      0.5 MiB       do()
    31    695.7 MiB      0.0 MiB       do()
    32    696.1 MiB      0.4 MiB       do()
    33    699.0 MiB      2.8 MiB       do()
    34    698.4 MiB      0.0 MiB       do()
    35    706.4 MiB      8.0 MiB       do()
...