小编Lio*_*oks的帖子

当我在for循环中加载大型pickle文件时,如何防止内存泄漏?

我有50个每个0.5 GB的pickle文件.每个pickle文件都包含一个自定义类对象列表.我可以使用以下功能单独加载文件:

def loadPickle(fp):
    with open(fp, 'rb') as fh:
        listOfObj = pickle.load(fh)
    return listOfObj
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试迭代加载文件时,我得到内存泄漏.

l = ['filepath1', 'filepath2', 'filepath3', 'filepath4']
for fp in l:
    x = loadPickle(fp)
    print( 'loaded {0}'.format(fp) )
Run Code Online (Sandbox Code Playgroud)

loaded filepath2打印前我的内存溢出.如何编写代码以保证在每次迭代期间只加载一个pickle?

关于SO的相关问题的答案建议使用weakref模块中定义的对象或使用模块的显式垃圾收集gc,但我很难理解如何将这些方法应用于我的特定用例.这是因为我对引用如何在引擎下工作的理解不足.

相关:Python垃圾收集

python garbage-collection memory-leaks pickle python-3.x

11
推荐指数
1
解决办法
2951
查看次数