如何解决BufferError:现有数据出口:无法在龙卷风中重新尺寸对象



我是龙卷风Web服务器的新用户。在流式传输数据时,我遇到了缓冲区错误。目前,我使用的是4.5.1版本。有人可以提出原因并解决缓冲区错误。

在2008年龙卷风问题中讨论了此错误。当前的理论是,只有在不正确使用线程时才发生,但这是不确定的。如果您可以排除线程问题或提供有关如何重现的更多详细信息,请在问题中添加评论。

作为龙卷风最新版本4.5.3

的一部分解决了此错误

有关更多详细信息,请浏览以下链接。

https://github.com/dask/distributed/issues/1704

在嵌入式Linux上运行龙卷风5.1。我也有同样的问题。

我有一个mqtt/websocket桥。当然,MQTT在另一个线程和Websocket(龙卷风(上运行。大多数情况下,一切都很好,但是就像每1000张消息崩溃了。

我巧妙地有第一个直接类方法来从MQTT线程发送数据。我有以下例外:

"数据的现有出口:对象不能重新尺寸

我以为好的,我只是错了。我更改了:

websocket_thread = threading.Thread(target=tornado.ioloop.IOLoop.current().start)
=>
websocket_thread = threading.Thread(target=tornado.ioloop.IOLoop.instance().start)

它效果更好。但是我开始以空线为异常而崩溃。我终于附加了堆栈跟踪打印,然后查看:

  File "/usr/lib/python3.5/site-packages/tornado/iostream.py", line 587, in write
    self._handle_write()
  File "/usr/lib/python3.5/site-packages/tornado/iostream.py", line 1063, in _handle_write
    self._write_buffer.advance(num_bytes)
  File "/usr/lib/python3.5/site-packages/tornado/iostream.py", line 184, in advance
    assert 0 < size <= self._size
AssertionError
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The empty line.

然后,我从文档中意识到龙卷风试图完全同时从2个线程发送,并且在尺寸差异上失败了。我的解决方案是将原始函数替换为使用IOLOOP ADD_CALLBACK功能发送的一个调度

# Called from other thread => need to use add callback                                                                                                         
# to schedule send from owner thread                                                                                                                           
@classmethod
def send_message(cls, msg_str):
    cls.ioloop.add_callback(cls.send_message_to_all, msg_str)

这似乎最终解决了我的问题。

最新更新