python加载模型包占用内存多大_加载pickle python对象会占用大量内存

博主遇到在Python中加载180Mb的pickle对象时,内存使用量激增到2-3Gb的问题。博客讨论了这个现象是否正常,以及如何处理大量数据的存储和加载。博主探讨了数据结构(Trie树)以及读取和添加单词到树中的效率。最后,博主考虑转向MongoDB作为更合适的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个

python的pickle对象,它生成一个180 Mb的文件.当我取消它时,内存使用量会爆炸到2或3Gb.你有类似的经历吗?这是正常的吗?

对象是包含字典的树:每个边是一个字母,每个节点都是一个潜在的单词.因此,要存储一个单词,您需要的边数与该单词的长度一样多.所以,第一级是最多26个节点,第二个是26 ^ 2,第三个是26 ^ 3等…对于每个节点都是一个单词我有一个属性指向关于单词的信息(动词,名词,定义等…).

我有最多约40个字符的单词.我有大约五十万条款.一切顺利,直到我腌制(使用简单的cpickle转储):它提供180 Mb文件.

我在Mac OS上,当我取消这些180 Mb时,操作系统会给python进程提供2或3 Gb的“内存/虚拟内存”:(

我没有在这棵树上看到任何递归:边缘的节点本身就是一个数组数组.不涉及递归.

我有点卡住:这些180 Mb的加载大约是20秒(没有谈到内存问题).我不得不说我的CPU不是那么快:核心i5,1.3Ghz.但我的硬盘是ssd.我只有4Gb的内存.

要在我的树中添加这500 000个单词,我会阅读大约7 000个文件,每个文件包含大约100个单词.这个读取使得mac os分配的内存高达15 Gb,主要是在虚拟内存上:(我一直在使用“with”语句确保关闭每个文件,但实际上并没有帮助.阅读文件带走对于40 Ko,0.2秒.对我来说似乎很长.将它添加到树上要快得多(0.002秒).

最后我想创建一个对象数据库,但我猜python并不适合.也许我会去MongoDB 🙁

class Trie():

"""

Class to store known entities / word / verbs...

"""

longest_word = -1

nb_entree = 0

def __init__(self):

self.children = {}

self.isWord = False

self.infos =[]

def add(self, orthographe, entree):

"""

Store a string with the given type and definition in the Trie structure.

"""

if len(orthographe) >Trie.longest_word:

Trie.longest_word = len(orthographe)

if len(orthographe)==0:

self.isWord = True

self.infos.append(entree)

Trie.nb_entree += 1

return True

car = orthographe[0]

if car not in self.children.keys():

self.children[car] = Trie()

self.children[car].add(orthographe[1:], entree)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值