我遇到问题twisted.internet.reactor
我的所有客户都拥有完全相同的环境,但只有部分人遇到过这个问题:
他们通过connectTCP
正确地ws
到服务器并交换了几条消息。大约一分钟后,他们应该通过
def execute(self, message, callback=None):
print(">>>", message, flush=True)
reactor.callFromThread(self._client_protocol_instance.send, message, callback)
self._client_protocol_instance.send
方法定义如下:
def send(self, command, callback):
print("send", command, callback, flush=True)
timestamp = int(time() * 1000000)
msg = (command.strip() + " --timestamp:" + str(timestamp))
if _self._debug:
_self._commands[str(timestamp)] = msg
if callback is not None:
_self._callbacks[str(timestamp)] = callback
payload = msg.encode()
_self._status_controller.set_state(payload)
self.sendMessage(payload)
第一个print
出现在stdout中,但第二个出现在stdout中。我假设send
没有被执行。在reactor.run()
之后,这是整个程序中reactor
的唯一引用。
服务器立即检测到在此情况发生后杀死客户端的进程,因此此时连接仍处于活动状态。
导致这种情况的原因是什么?
答案 0 :(得分:0)
我找到了解决方案,问题在于上一个任务在尝试发送消息时有时无法完成。
我通过将所有cpu-heavy响应处理逻辑移动到线程中来解决它,以释放反应堆以获取其他消息。