我正在开发一个使用 Python Twisted 模块的相对简单的项目。它似乎运行良好,除非客户端的连接失败(我故意没有启动主机服务器来解决这个问题)它继续阻塞并且程序永远不会完成。
这是我正在尝试做的一个简化示例,它复制了这个问题:
#!/etc/python2.7
from twisted.internet import reactor, protocol
class Client_Protocol(protocol.Protocol):
def connectionMade(self):
print "A connection was made!"
class Client_Factory(protocol.ClientFactory):
def buildProtocol(self, addr):
return Client_Protocol()
def clientConnectionFailed(self, connector, reason):
print "Connection Failed!"
factory = Client_Factory()
reactor.connectTCP("localhost", 8000, factory)
reactor.run()
结果是程序打印出“连接失败!” 如您所料(只要主机没有运行)。但是当连接失败时,代码永远不会完成。它继续阻塞。我该如何阻止它?
我在网上查看了替代异步方法(如 reactor.callInThread 和 reactor.callFromThread)。我试过“deferToThread”。但无论如何,客户端似乎永远不会在连接失败后停止阻塞。