【问题标题】:Python Mediator pattern memory leak?Python调解器模式内存泄漏?
【发布时间】:2015-11-21 18:55:01
【问题描述】:

我有几个类通过另一个类相互通信(类似于中介者模式)。

每个类在创建和销毁时都会打印一条消息:

当我创建一个 Mediator 对象时,Mediator 持有对所有其他对象的引用,并且所有对象都持有对 Mediator 的引用。

之后,程序结束时不会调用对象的析构函数:

这是为什么呢?这是内存泄漏吗?

【问题讨论】:

  • 听起来你有循环引用。考虑使用weakref 作为后向引用。
  • 请发布复制/粘贴代码,而不是您的编辑器的屏幕截图或其他任何内容。
  • 只是为了扩展......当对象有前向和后向引用时,引用计数可能永远不会变为零,也不会被删除。垃圾收集器试图找出它,但不是 100%。

标签: python design-patterns mediator


【解决方案1】:

在您的情况下,应用程序正在退出,因此操作系统分配给 python 进程的所有内存将在它终止后被释放。

至于为什么没有打印语句,当程序退出时它会破坏对象,我假设您正在使用 __del__ 方法来打印消息,并且如 Python 文档所述,这些方法不能保证被调用在程序退出时,Link here

object.__del__(self):

... 无法保证在解释器退出时为仍然存在的对象调用 __del__() 方法。

【讨论】:

  • 我认为这最好归结为评论。
猜你喜欢
  • 1970-01-01
  • 2021-01-10
  • 2010-11-23
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多