启动和停止Twisted连接

时间:2018-01-08 12:11:12

标签: python websocket twisted twisted.internet twisted.client

我正在编写使用python Twisted API的应用程序(即WebSocketClientProtocol, WebSocketClientFactory, ReconnectiongClientFactory。我想用以下接口将客户端工厂包装到阅读器中

class Reader: 
    def start(self):
        pass
    def stop(self):
        pass

启动功能将用于打开连接(即连接到ws api并开始读取数据),而stop将停止此类连接。

我的问题是,如果我在reactor.run()内使用start,连接就会启动,一切正常,但我的代码永远不会通过该行(看起来像阻止对我的调用)而且我无法执行后续操作行(在我的测试中包括.stop)。

我尝试使用reactor.callFromThread(reactor.run)reactor.callFromThread(reactor.stop)之类的变体,甚至是调用Thread(target=...)的兴奋剂,但似乎都没有效果(它们通常根本不构建协议或打开连接)。

欢迎提供有关如何实施Reader.startReader.stop的任何帮助或指南。

1 个答案:

答案 0 :(得分:0)

如果您将reactor.run放在Reader.start内,则Reader将成为与其他代码一起使用的难题。你的困难只是其中的第一个症状。

调用reactor.runreactor.stop是负责管理应用程序生命周期的代码。将这些调用放在与WebSocket应用程序代码分开的位置。例如:

r = Reader()
r.start()
reactor.run()

或者更好的是,实施a twist(d) plugin并让tw(d)为您管理反应堆。