我有一个结构为的对象(defaultdict): {srting:[(字符串,(float,float)),(string,(float,float)),…]}
它的大小大约是12.5 MB
我正在用代码进行酸洗:
with open(Path_to_file, 'wb') as file:
pickle.dump(data_dict, file)
Pickle文件重约300 MB。 正在取消与代码的匹配:
^{pr2}$系统使用大量RAM(大约3.5GB或更多)。但是在取消pickle之后,Python使用了大约1gb的RAM。在
所以我有两个问题:
在gc.收集()没用。在
我能复制这个。事实上,如果你正在解包一个大的(大约300米)文件,会占用大量额外的内存。在我的例子中,进程使用1.6G只是为了保留原始生成的
data_dict
,如果我从文件加载它,则使用2.9G。在然而,若在子进程中运行unpickling,系统将在进程
join()
之后进行一次完整的内存清理。(如回答所述:https://stackoverflow.com/a/1316799/1102535)。因此,在没有额外内存的情况下取消拾取的示例如下:这段代码有它的缺点(比如在dict之间复制),但至少你有这个想法。对我来说,它在取消拾取后使用的内存量几乎与酸洗前的原始数据相同。在
相关问题 更多 >
编程相关推荐