启动和停止 Twisted 连接

Starting and stopping Twisted connections

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

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

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

我的问题是,如果我在 start 中使用 reactor.run(),连接开始并且一切正常,但我的代码永远不会通过那条线(看起来像阻止对我的呼叫)而且我不能执行后续行(在我的测试中包括 .stop)。

我曾尝试使用 reactor.callFromThread(reactor.run)reactor.callFromThread(reactor.stop) 等变体,甚至尝试调用 Thread(target=...),但 none 似乎有效(它们通常不构建协议或完全打开连接)。

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

如果将 reactor.run 放在 Reader.start 中,那么 Reader 将很难与其他代码一起使用。你的困难只是第一个症状。

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

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

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