最近处理数据,有一个地方用的字典储存的,不知道为啥,有个地方的内存占用看不懂啊:
这是第一种:
31 83.4 MiB 0.0 MiB @profile
32 def main():
33 # data_count = taskResultDB.getResult(21, taskResultDB.resultType.FRQ_COUNT)
34 # data_sum = taskResultDB.getResult(21, taskResultDB.resultType.FRQ_SUM)
35 # data_tfidf = taskResultDB.getResult(21, taskResultDB.resultType.TFIDF)
36 # data_tfidf_2 = taskResultDB.getResult(21, taskResultDB.resultType.TFIDF_2)
37 83.4 MiB 0.0 MiB data = taskResultDB.getResult(21)
38
39 '''
40 data_count = taskResultDB.tranDataToDict(
41 data_count)[taskResultDB.resultType.FRQ_COUNT]
42 data_sum = taskResultDB.tranDataToDict(
43 data_sum)[taskResultDB.resultType.FRQ_SUM]
44 data_tfidf = taskResultDB.tranDataToDict(
45 data_tfidf)[taskResultDB.resultType.TFIDF]
46 data_tfidf_2 = taskResultDB.tranDataToDict(
47 data_tfidf_2)[taskResultDB.resultType.TFIDF_2]
48 '''
49 1778.2 MiB 1694.8 MiB datas = taskResultDB.tranDataToDict(data)
50
51 # wordDict = tranToWordDict(data_sum, data_count)
52 1874.5 MiB 96.3 MiB wordDict = tranToWordDict_2(datas)
53
54 # data_count = None
55 # data_sum = None
56 # data_tfidf = None
57 # data_tfidf_2 = None
58 1850.5 MiB -24.0 MiB datas = None
59 1552.3 MiB -298.2 MiB data = None
60 1551.8 MiB -0.5 MiB gc.collect()
61 1551.8 MiB 0.0 MiB return wordDict
第二种就是将注释去掉,注释掉现在的代码
Line # Mem usage Increment Line Contents
================================================
31 83.4 MiB 0.0 MiB @profile
32 def main():
33 83.4 MiB 0.0 MiB data_count = taskResultDB.getResult(21, taskResultDB.resultType.FRQ_COUNT)
34 83.4 MiB 0.0 MiB data_sum = taskResultDB.getResult(21, taskResultDB.resultType.FRQ_SUM)
35 83.4 MiB 0.0 MiB data_tfidf = taskResultDB.getResult(21, taskResultDB.resultType.TFIDF)
36 83.4 MiB 0.0 MiB data_tfidf_2 = taskResultDB.getResult(21, taskResultDB.resultType.TFIDF_2)
37
38 83.4 MiB 0.0 MiB data_count = taskResultDB.tranDataToDict(
39 463.8 MiB 380.3 MiB data_count)[taskResultDB.resultType.FRQ_COUNT]
40 463.8 MiB 0.0 MiB data_sum = taskResultDB.tranDataToDict(
41 560.4 MiB 96.7 MiB data_sum)[taskResultDB.resultType.FRQ_SUM]
42 560.4 MiB 0.0 MiB data_tfidf = taskResultDB.tranDataToDict(
43 659.5 MiB 99.1 MiB data_tfidf)[taskResultDB.resultType.TFIDF]
44 659.5 MiB 0.0 MiB data_tfidf_2 = taskResultDB.tranDataToDict(
45 697.5 MiB 38.0 MiB data_tfidf_2)[taskResultDB.resultType.TFIDF_2]
46
47 713.1 MiB 15.6 MiB wordDict = tranToWordDict(data_sum, data_count)
48
49 712.6 MiB -0.5 MiB data_count = None
50 700.6 MiB -12.0 MiB data_sum = None
51 699.1 MiB -1.5 MiB data_tfidf = None
52 590.9 MiB -108.2 MiB data_tfidf_2 = None
53 546.9 MiB -44.0 MiB gc.collect()
54 546.9 MiB 0.0 MiB return wordDict
data 是获取的一个 ORM 对象,获取数据的 数据是 4 部分,sun,count,tfidf,tfidf_2,转存出的 dict 的结构是:
{
type:{
"word": data
}
}
type 只有下面的四种...
就是一个嵌套字典,只不过第二个是分开转换的. 可以理解为 data_count + data_sum + data_tfidf + data_tfidf_2 = data 但是根据信息能看出,输出的 data 字典占用的空间远远大于前几个的和,这是为什么呢
哦,还有一个信息就是 count,sum,tfidf,tfidf_2 的内容除了 value 不一样以外,key 是一样的,和这个有关系么?
python 用的我好想用 C++重写......几十万条瞬间一个 G 没了.....前段时间后台程序自己关了,连 log 里都没有信息,就像断点一样.....盯着俩消失才知道是内存消耗没了....
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.