1

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

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

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

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

我尝试过使用变体,例如reactor.callFromThread(reactor.run)甚至reactor.callFromThread(reactor.stop)是 excplicity 调用Thread(target=...),但似乎都没有工作(它们通常根本不构建协议或打开连接)。

欢迎任何有关如何实施的帮助或Reader.start指南Reader.stop

4

1 回答 1

0

如果你把它放在reactor.run里面,Reader.start那么Reader将是一个难以与其他代码一起使用的组件。你的困难只是这方面的第一个症状。

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

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

或者更好的是,实现一个 twist(d) 插件并让 twist(d) 为您管理反应器。

于 2018-01-09T12:31:12.707 回答