启动和停止 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.start
和 Reader.stop
的任何帮助或指南。
如果将 reactor.run
放在 Reader.start
中,那么 Reader
将很难与其他代码一起使用。你的困难只是第一个症状。
调用 reactor.run
和 reactor.stop
是负责管理应用程序生命周期的代码的工作。将这些调用放在与您的 WebSocket 应用程序代码分开的地方。例如:
r = Reader()
r.start()
reactor.run()
或者更好的是,实施 a twist(d) plugin 并让 twist(d) 为您管理反应器。
我正在编写使用 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.start
和 Reader.stop
的任何帮助或指南。
如果将 reactor.run
放在 Reader.start
中,那么 Reader
将很难与其他代码一起使用。你的困难只是第一个症状。
调用 reactor.run
和 reactor.stop
是负责管理应用程序生命周期的代码的工作。将这些调用放在与您的 WebSocket 应用程序代码分开的地方。例如:
r = Reader()
r.start()
reactor.run()
或者更好的是,实施 a twist(d) plugin 并让 twist(d) 为您管理反应器。