python - 在 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()
解决方案
推荐阅读
- spring-boot - 如何在 Spring Boot 中从 JPA 自定义 @Query 获取结果到 DTO
- c++ - 为什么要将对象的副本作为函数的参数?为什么 const ref 不是默认的参数方式?
- node.js - 是否可以在 ec2 上托管网站并将其与 Aruba 域连接?
- python - 如何在 ID 上选择数据框中的行信息
- php - 使用 imagecreatefromjpeg 的脚本的高内存消耗
- r - 创建用于将分解图转换为数据框的函数
- c++ - 为 C++ 库创建 podspec
- java - 如何使用 Ansible 创建包含文件夹中所有证书的信任库?
- c# - 有没有办法检查 XML 文件中的特定节点是否包含评论以及是否可以读取评论?
- angular - 带有路径别名的错误自动导入