关于Twisted协议和loopingC的问题

2024-04-18 18:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个python twisted应用程序,其中包含标准工厂和协议子类。我的Protocol子类connectionMade()方法启动一个循环调用,每5分钟运行一次。我有两个问题:

  1. 假设连接丢失。是的,我知道这将导致调用connectionLost()方法。但是协议对象本身会发生什么呢?什么时候停止存在?是不是马上就把垃圾收起来了?
  2. 那个协议中的循环呼叫怎么办?如果我不显式地取消它,这是否意味着它将永远运行并阻止协议被垃圾回收?

Tags: 对象方法应用程序协议标准工厂twisted子类
1条回答
网友
1楼 · 发布于 2024-04-18 18:31:42

当不再有对它们的引用时,它们会被垃圾回收,所以我不能说何时会收集程序中的对象。在

不过,我可以告诉你关于参考资料不被扭曲。在

连接到TransportProtocol将有一个全局→reactor→transport→protocol的引用。当传送带关闭时,从反应器到传送带的参考被破坏。反应器只引用传输来向其传递事件,并且由于断开连接的传输没有要传递的事件,因此反应堆可以将其丢弃。因此,反应堆不再参考该协议。此时,如果没有其他全局变量或活动堆栈变量引用它,它将被收集。在

一个LoopingCall被globals→reactor→DelayedCall(由callLater返回的对象)→LoopingCall.__call__绑定方法→{}引用。如果LoopingCallf属性(它调用的可调用)仍然引用您的Protocol,那么是的,Protocol对象将继续存在于内存中。但是,由于它不再有有用的transport,因此您无法用它做太多事情。在

相关问题 更多 >