假设我有一个带有标准Factory和Protocol子类的python twisted应用程序。我的Protocol子类connectionMade()方法启动一个每5分钟运行一次的loopingCall。我有两个问题:
答案 0 :(得分:0)
当没有对它们的引用时,事情会被垃圾收集,所以我不能说当你的程序中的对象何时被收集。
但是,我可以告诉你保存的信息来自Twisted。
连接到Protocol
的{{1}}将有一个全局变量→reactor→transport→protocol的引用。当运输关闭时,从反应器到运输的参考被打破。反应器仅引用传输以向其传递事件,并且由于断开连接的传输没有事件要传递,因此反应器可以丢弃它。因此,反应器不再参考该方案。此时,如果没有其他全局变量或活动堆栈变量引用它,它将被收集。
globals→reactor→Transport
(LoopingCall
返回的对象)→DelayedCall
绑定方法→callLater
引用LoopingCall.__call__
。如果LoopingCall
的{{1}}属性(它正在调用的可调用对象)仍引用您的LoopingCall
,那么是的,您的f
对象将继续存在于内存中。但是,由于它不再具有有用的Protocol
,因此用它做的并不多。