我编写了一个读取两个文件内容的python脚本,第一个是一个相对较小的文件(~30KB),第二个是一个较大的文件~270MB。两个文件的内容都加载到字典数据结构中。加载第二个文件时,我预计所需的 RAM 量大致相当于磁盘上文件的大小,可能会有一些开销,但观察我 PC 上的 RAM 使用情况,它似乎始终需要 ~2GB(大约文件大小的 8 倍)。相关的源代码如下(插入暂停以便我可以看到每个阶段的 RAM 使用情况)。消耗大量内存的行是“tweets = map(json.loads, tweet_file)”:
def get_scores(term_file):
global scores
for line in term_file:
term, score = line.split("\t") #tab character
scores[term] = int(score)
def pause():
tmp = raw_input('press any key to continue: ')
def main():
# get terms and their scores..
print 'open word list file ...'
term_file = open(sys.argv[1])
pause()
print 'create dictionary from word list file ...'
get_scores(term_file)
pause()
print 'close word list file ...'
term_file.close
pause()
# get tweets from file...
print 'open tweets file ...'
tweet_file = open(sys.argv[2])
pause()
print 'create dictionary from word list file ...'
tweets = map(json.loads, tweet_file) #creates a list of dictionaries (one per tweet)
pause()
print 'close tweets file ...'
tweet_file.close
pause()
有人知道为什么吗?我担心的是我想将我的研究扩展到更大的文件,但会很快耗尽内存。有趣的是,打开文件后内存使用量似乎没有明显增加(因为我认为这只是创建了一个指针)。
我有一个想法,尝试一次遍历文件一行并处理我能做的事情,只存储我需要的最小值以供将来参考,而不是将所有内容加载到字典列表中,但我只是想看看是否创建字典时文件大小到内存的乘数大约是 8 倍是否符合其他人的经验?