【问题标题】:Twisted reactor not calling functions from thread correctlyTwisted reactor 未正确从线程调用函数
【发布时间】:2016-12-06 12:36:05
【问题描述】:

我在使用twisted.internet.reactor 时遇到问题,我所有的客户都有完全相同的环境,但只有一些人遇到了这个问题:

他们通过ws 正确地connectTCP 到服务器并交换前几条消息。大约一分钟后,他们应该通过

向服务器发送消息
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 出现在标准输出中,但第二个没有。我假设send 没有被执行。在reactor.run()之后,这是整个程序中对reactor的唯一引用。

发生这种情况后,服务器会立即检测到终止客户端的进程,因此当时连接仍然存在。

这可能是什么原因造成的?

【问题讨论】:

    标签: reactor twisted.internet


    【解决方案1】:

    我找到了解决方案,问题在于上一个任务在尝试发送消息时有时无法完成。

    我通过将所有占用大量 CPU 的响应处理逻辑移动到线程中来为其他消息释放反应器来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多