Python 3.x Tornado读取直到关闭方法错误

Python 3.x Tornado读取直到关闭方法错误,python-3.x,tornado,tcpserver,Python 3.x,Tornado,Tcpserver,我正试图用一个tornado在python中创建TCP服务器。 我的句柄流方法如下所示 async def handle_stream(self, stream, address): while True: try: stream.read_until_close(streaming_callback=self._on_read) except StreamClosedError: break 在\u on

我正试图用一个tornado在python中创建TCP服务器。 我的句柄流方法如下所示

async def handle_stream(self, stream, address):
    while True:
        try:
            stream.read_until_close(streaming_callback=self._on_read)
        except StreamClosedError:
            break
\u on_read
方法中,我试图读取和处理数据,但每当新客户机连接到服务器时,它就会发出
断言错误:已在读取
错误

 File "/.local/lib/python3.5/site-packages/tornado/iostream.py", line 525, in read_until_close
    future = self._set_read_callback(callback)
  File "/.local/lib/python3.5/site-packages/tornado/iostream.py", line 860, in _set_read_callback
    assert self._read_future is None, "Already reading"
异步读取套接字中的所有数据,直到其关闭<代码>读取直到关闭必须调用一次,但循环会强制进行第二次调用,这就是您出错的原因:

  • 在第一次迭代中,
    read_直到_close
    设置
    streaming_回调
    ,并返回
    Future
    ,以便您可以等待它或稍后使用
  • 在第二次迭代中,
    read\u till\u close
    引发异常,因为您已经在第一次迭代中设置了回调
read\u直到关闭
返回
Future
对象,您可以
等待
它使事情正常进行:

async def handle_stream(self, stream, address):
    try:
        await stream.read_until_close(streaming_callback=self._on_read)
    except StreamClosedError:
        # do something