我有一个程序,它通过标准输入导入文本文件,并将这些行聚合到一个字典中。但是输入文件非常大(1Tb顺序),我没有足够的空间将整个字典存储在内存中(在64Gb ram机器上运行)。目前,我有一个非常简单的子句,一旦达到一定长度(在这种情况下为100)就输出字典并清除内存。然后可以在稍后的时间点汇总输出。
所以我想:一旦内存已满,输出字典。管理这个的最佳方法是什么?是否有一个功能,它给我当前的内存使用?继续检查是否代价高昂?我使用正确的策略吗?
import sys
X_dic = dict()
# Used to print the dictionary in required format
def print_dic(dic):
for key, value in dic.iteritems():
print "{0}\t{1}".format(key, value)
for line in sys.stdin:
value, key = line.strip().split(",")
if (not key in X_dic):
X_dic[key] = []
X_dic[key].append(value)
# Limit size of dic.
if( len(X_dic) == 100):
print_dic(X_dic) # Print and clear dictionary
X_dic = dict()
# Now output
print_dic(X_dic)
答案 0 :(得分:0)
模块resource
提供有关您正在使用多少资源(内存等)的一些信息。请参阅here以获得一些不错的用法。
在Linux系统上(我不知道你在哪里),你可以看到文件/proc/meminfo
的内容。作为 proc 文件系统的一部分,它会自动更新。
但实际上,我反对监控内存并尽可能多地使用它的整个策略。我宁愿建议定期转储字典(在添加1M条目之后)。它可能会加速你的程序,以保持字母小于可能;如果所有转储具有相似的大小,它也可能对以后的处理有好处。如果您在没有其他任何东西使用内存的情况下转储一个适合您整个内存的巨大字典,那么如果其他内容正在使用您的某些内存,您以后将无法重新读取该字典。那么你就必须创造一种其他东西没有使用内存的情况(例如重启或类似)。不太方便。