在python3中使用pickle加载时内存泄漏

2024-04-26 18:05:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我多次尝试加载一个名为m.pkl(约81M)的大型pickle文件。每次加载后,内存使用量不断增加。但是如果在加载之前添加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()

Tags: 文件内存importnonebinmainusrdef