2024-04-18 18:31:42 发布
网友
假设我有一个python twisted应用程序,其中包含标准工厂和协议子类。我的Protocol子类connectionMade()方法启动一个循环调用,每5分钟运行一次。我有两个问题:
当不再有对它们的引用时,它们会被垃圾回收,所以我不能说何时会收集程序中的对象。在
不过,我可以告诉你关于参考资料不被扭曲。在
连接到Transport的Protocol将有一个全局→reactor→transport→protocol的引用。当传送带关闭时,从反应器到传送带的参考被破坏。反应器只引用传输来向其传递事件,并且由于断开连接的传输没有要传递的事件,因此反应堆可以将其丢弃。因此,反应堆不再参考该协议。此时,如果没有其他全局变量或活动堆栈变量引用它,它将被收集。在
Transport
Protocol
一个LoopingCall被globals→reactor→DelayedCall(由callLater返回的对象)→LoopingCall.__call__绑定方法→{}引用。如果LoopingCall的f属性(它调用的可调用)仍然引用您的Protocol,那么是的,Protocol对象将继续存在于内存中。但是,由于它不再有有用的transport,因此您无法用它做太多事情。在
LoopingCall
DelayedCall
callLater
LoopingCall.__call__
f
transport
当不再有对它们的引用时,它们会被垃圾回收,所以我不能说何时会收集程序中的对象。在
不过,我可以告诉你关于参考资料不被扭曲。在
连接到
Transport
的Protocol
将有一个全局→reactor→transport→protocol的引用。当传送带关闭时,从反应器到传送带的参考被破坏。反应器只引用传输来向其传递事件,并且由于断开连接的传输没有要传递的事件,因此反应堆可以将其丢弃。因此,反应堆不再参考该协议。此时,如果没有其他全局变量或活动堆栈变量引用它,它将被收集。在一个}引用。如果
LoopingCall
被globals→reactor→DelayedCall
(由callLater
返回的对象)→LoopingCall.__call__
绑定方法→{LoopingCall
的f
属性(它调用的可调用)仍然引用您的Protocol
,那么是的,Protocol
对象将继续存在于内存中。但是,由于它不再有有用的transport
,因此您无法用它做太多事情。在相关问题 更多 >
编程相关推荐