- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了以下代码来处理 twisted 中丢失的连接:
class Foo(LineReceiver):
def connectionLost(self, reason):
if reason.type != ConnectionLost:
reactor.stop()
def terminate(self):
self.transport.loseConnection()
terminate
方法被一些输入/输出协议(protocol)调用。我必须在 connectionLost
方法中测试 reason.type
以避免错误当我用 Ctrl-C 中断我的程序时,“无法停止正在运行的 react 堆”调用 terminate
方法。
这段代码有效,但我想知道是否有更优雅的方式来管理 twisted 中的连接结束?谢谢!
最佳答案
您面临的问题是 control+C 正在调用一个已安装的停止 react 器的信号处理程序。 react 堆在停止时会调用您的 connectionLost
方法,因为关闭 react 堆会自动关闭所有连接。反过来,您的协议(protocol)会尝试停止 react 器 - 却发现它已经停止了!
避免这种情况的一个简单(但不完全正确)的方法是查看 running
在停止 react 器之前对其进行属性设置,如下所示:
def connectionLost(self, reason):
if reactor.running:
reactor.stop()
(另请注意,您可能不应该那样检查异常类型;如果您真的关心原因的类型,您可能想使用 Failure.check
代替,但在大多数情况下您不应该关心原因的类型;断开的连接只是断开的连接,除非您试图确定其断开的某些非常具体的属性,例如终止是否应导致 SSL session 终止。)
如果您想对此进行更彻底的检查,您将需要通过 "before", "shutdown"
system event trigger 监控 react 器的状态。 ,或使用 twisted.internet.task.react
API在 Twisted 12.3 中引入。
关于python - 如何正确管理 connectionLost in twisted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076897/
我编写了以下代码来处理 twisted 中丢失的连接: class Foo(LineReceiver): def connectionLost(self, reason): i
我无法处理 ConnectionLost 异常。我所拥有的简要示例。首先,我设置与 jabber 服务器的连接并对其执行 ping 操作。我为此使用 wokkel 库。然后我将 errback 添加到
我使用 webclient.Agent 编写了一个 http 下载器。 使用原因参数调用正文消费者对象的 connectionLost 函数。 def connectionLost(self, rea
当我尝试抓取某个网站(同时使用 spider 和 shell)时,出现以下错误: twisted.web._newclient.ResponseNeverReceived: [] 我发现当没有设置用户
我是一名优秀的程序员,十分优秀!