【问题标题】:Managing dictionary memory size in python在 python 中管理字典内存大小
【发布时间】:2014-03-30 16:23:42
【问题描述】:

我有一个程序,它通过标准输入导入文本文件并将这些行聚合到字典中。但是输入文件非常大(1Tb 订单),我没有足够的空间将整个字典存储在内存中(在 64Gb ram 机器上运行)。目前 Iv 有一个非常简单的子句,一旦字典达到一定长度(在本例中为 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)

【问题讨论】:

    标签: python memory-management dictionary


    【解决方案1】:

    模块resource 提供了一些关于您正在使用多少资源(内存等)的信息。请参阅 here 了解一个不错的小用法。

    在Linux系统上(我不知道你在哪里)你可以查看文件/proc/meminfo的内容。作为 proc 文件系统的一部分,它会自动更新。

    但实际上,我反对监控内存并尽可能多地使用它的整个策略。我宁愿建议定期转储字典(在添加了 100 万个条目之后)。它可能会加快您的程序以使 dict 尽可能小;如果所有转储的大小相似,它也可能对以后的处理有好处。如果您在没有其他东西使用内存时转储了一个适合您整个内存的巨大字典,那么如果其他东西当前正在使用您的某些内存,那么您稍后将无法重新读取该字典。因此,您将不得不创建一个没有其他东西正在使用内存的情况(例如重新启动或类似的)。不是很方便。

    【讨论】:

    • 我想在转储字典之前尽可能多地汇总结果。这将节省以后的时间。你最后的评论是什么意思?如果 IU 只使用了 80% 的内存,这样可以吗?
    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2010-09-27
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2010-10-14
    • 2014-06-25
    相关资源
    最近更新 更多