【发布时间】:2019-10-03 18:43:13
【问题描述】:
在我的代码开始时,我加载了一个巨大的 (33GB) 腌制对象。这个对象本质上是一个包含许多相互连接的节点的巨大图。
我定期运行 gc.collect()。当我加载了巨大的对象时,这需要 100 秒。当我将代码更改为不加载大对象时, gc.collect() 需要 0.5 秒。我假设这是由于 python 在每次调用 gc.collect() 时检查该对象的每个子对象的引用循环引起的。
我知道,无论是巨大的对象,还是它在开始加载时引用的任何对象,都不需要进行垃圾回收。我如何告诉python这个,这样我就可以避免100s gc时间?
【问题讨论】:
-
也许看看
gc.is_tracked(large_object)? -
为什么要手动调用
gc.collect? -
如果可能,不要使用 pickle 来序列化 30gb 的数据集。如此大的数据通常具有更专业的表示。你处理什么数据?