首页 > 解决方案 > 在 python3 中使用 pickle 加载时的内存泄漏

问题描述

我尝试多次加载一个名为m.pkl(约 81M)的大型泡菜文件。每次加载后,内存使用量不断增加。但是如果我m = None在加载之前添加,内存使用就变得正常了。为什么?

#!/usr/bin/env python3

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()

标签: pythonpython-3.xmemory-leakspickle

解决方案


推荐阅读