我是龙卷风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)
这似乎最终解决了我的问题。