如何找出代码中存在哪些特定的循环引用
Posted
技术标签:
【中文标题】如何找出代码中存在哪些特定的循环引用【英文标题】:How to find out which specific circular references are present in code 【发布时间】:2015-11-02 02:13:18 【问题描述】:我有一些 python 代码,其中 gc.collect() 似乎释放了大量内存。鉴于 Python 的引用计数性质,我倾向于认为我的程序包含很多循环引用。由于有些数据结构比较大,我想介绍一下弱引用。现在我需要找到循环引用,找到了一些明显的引用,我想知道是否可以检测到循环引用和明确形成环的对象。到目前为止,我只看到了有关如何调用 gc.collect 等的教程。人。
【问题讨论】:
这些对象有自定义的__del__
方法吗?
您可能会发现objgraph 包很有用。它将创建对象之间引用的可视化。 Here's a blog post about circular references and objgraph.
我还要提一下,理想情况下,如果可能,您应该首先删除这些循环引用,而不是尝试解决它们:)。
见***.com/questions/508277/…
【参考方案1】:
除非您重写 __del__
方法,否则您不必担心循环依赖,因为 Python 能够正确处理它们。
【讨论】:
... 直到您尝试使用 python 的多处理并且您的对象不再腌制。 IMO 在设计应用程序时考虑如何避免循环引用是一个好主意,因为它打开了几扇门以在以后优化性能。这不与过早优化相同。以上是关于如何找出代码中存在哪些特定的循环引用的主要内容,如果未能解决你的问题,请参考以下文章