首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在解酸洗系统之后,使用大量的RAM。

问在解酸洗系统之后,使用大量的RAM。
EN

Stack Overflow用户
提问于 2016-02-12 10:51:58
回答 1查看 1.7K关注 0票数 4

我有一个具有结构的对象(defaultdict):{ srting:(string,(浮,浮)),(字符串,(浮,浮)),.}

大小约为12,5MB。

我在用密码泡菜:

代码语言:javascript
复制
with open(Path_to_file, 'wb') as file:
    pickle.dump(data_dict, file)

酸洗文件的重量约300 MB。在处理过程中,使用代码进行无酸洗:

代码语言:javascript
复制
with open(Path_to_file, 'rb') as file:
    data_dict_new = pickle.load(file)

系统正在使用大量的RAM (大约3,5 GB及更多)。但是在解锁之后,Python使用了大约1GB的RAM。

所以我有两个问题:

  1. 在我的结构中,内存中保留的是什么?
  2. 我怎么才能打扫它?

gc.collect()没有帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-02-12 13:49:30

我复制了这个。实际上,如果您正在解析一个大文件(约300米),则会占用大量额外的内存。在我的示例中,进程使用1.6G只是为了保持原始生成的data_dict,如果我从文件中加载它,则使用2.9G。

但是,如果您要在子进程中运行去酸洗,系统将在进程join()之后完成完整的内存清理。(如本答案所述:https://stackoverflow.com/a/1316799/1102535)。因此,在不需要额外内存的情况下,使用了这样的示例:

代码语言:javascript
复制
from multiprocessing import Process, Manager

def load_pickle(filename, data):
    import cPickle as pickle
    with open(filename, 'rb') as file:
        data_pkl = pickle.load(file)
    for key, val in data_pkl.iteritems():
        data[key] = val

manager = Manager()
data_dict = manager.dict()
p = Process(target=load_pickle, args=("test.pkl", data_dict))
p.start()
p.join()
print len(data_dict)

这段代码有它的缺点(比如在dicts之间进行复制),但至少您有这样的想法。至于我,它使用的内存数量几乎相同,在不加酸洗之前,对原始数据的酸洗。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35360715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档