python加载模型包占用内存多大_加载pickle python对象会占用大量内存
我有一個
python的pickle對象,它生成一個180 Mb的文件.當我取消它時,內(nèi)存使用量會爆炸到2或3Gb.你有類似的經(jīng)歷嗎?這是正常的嗎?
對象是包含字典的樹:每個邊是一個字母,每個節(jié)點都是一個潛在的單詞.因此,要存儲一個單詞,您需要的邊數(shù)與該單詞的長度一樣多.所以,第一級是最多26個節(jié)點,第二個是26 ^ 2,第三個是26 ^ 3等…對于每個節(jié)點都是一個單詞我有一個屬性指向關(guān)于單詞的信息(動詞,名詞,定義等…).
我有最多約40個字符的單詞.我有大約五十萬條款.一切順利,直到我腌制(使用簡單的cpickle轉(zhuǎn)儲):它提供180 Mb文件.
我在Mac OS上,當我取消這些180 Mb時,操作系統(tǒng)會給python進程提供2或3 Gb的“內(nèi)存/虛擬內(nèi)存”:(
我沒有在這棵樹上看到任何遞歸:邊緣的節(jié)點本身就是一個數(shù)組數(shù)組.不涉及遞歸.
我有點卡住:這些180 Mb的加載大約是20秒(沒有談到內(nèi)存問題).我不得不說我的CPU不是那么快:核心i5,1.3Ghz.但我的硬盤是ssd.我只有4Gb的內(nèi)存.
要在我的樹中添加這500 000個單詞,我會閱讀大約7 000個文件,每個文件包含大約100個單詞.這個讀取使得mac os分配的內(nèi)存高達15 Gb,主要是在虛擬內(nèi)存上:(我一直在使用“with”語句確保關(guān)閉每個文件,但實際上并沒有幫助.閱讀文件帶走對于40 Ko,0.2秒.對我來說似乎很長.將它添加到樹上要快得多(0.002秒).
最后我想創(chuàng)建一個對象數(shù)據(jù)庫,但我猜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)
總結(jié)
以上是生活随笔為你收集整理的python加载模型包占用内存多大_加载pickle python对象会占用大量内存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应激性心肌病是什么
- 下一篇: python分布式存储文件_python