我正在编写使用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.start
和Reader.stop
的任何帮助或指南。
答案 0 :(得分:0)
如果您将reactor.run
放在Reader.start
内,则Reader
将成为与其他代码一起使用的难题。你的困难只是其中的第一个症状。
调用reactor.run
和reactor.stop
是负责管理应用程序生命周期的代码。将这些调用放在与WebSocket应用程序代码分开的位置。例如:
r = Reader()
r.start()
reactor.run()
或者更好的是,实施a twist(d) plugin并让tw(d)为您管理反应堆。