Dar*_*ler 4 python garbage-collection
在代码开始时,我加载了一个巨大的(33GB)腌制对象。该对象本质上是一个具有许多互连节点的巨大图。
我定期运行 gc.collect()。当我加载巨大的对象时,这需要 100 秒。当我将代码更改为不加载大对象时,gc.collect() 需要 0.5 秒。我假设这是由于每次调用 gc.collect() 时 python 检查该对象的每个子对象的引用循环而引起的。
我知道无论是大对象还是它在开始加载时引用的任何对象都不需要进行垃圾收集。我如何告诉Python这一点,这样我就可以避免100秒的GC时间?
在 python 3.7 中,您可能可以使用https://docs.python.org/3/library/gc.html#gc.freeze进行破解
allocate_a_lot()
gc.freeze() # move all objects to a permanent generation. none will be collected
allocate_some_more()
gc.collect() # collect all non-frozen objects
gc.unfreeze() # return to sanity
Run Code Online (Sandbox Code Playgroud)
这就是说,我认为 python 没有提供你想要的工具。一般来说,所有垃圾收集语言都不希望您进行手动内存管理。
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |