我正在尝试用龙卷风在python中创建TCP服务器。 我的句柄流方法看起来像这样,
async def handle_stream(self, stream, address):
while True:
try:
stream.read_until_close(streaming_callback=self._on_read)
except StreamClosedError:
break
在_on_read
方法中,我试图读取和处理数据,但是每当新客户端连接到服务器时,它都会显示AssertionError: Already reading
错误。
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"
答案 0 :(得分:2)
read_until_close异步地从套接字读取所有数据,直到关闭为止。 read_until_close
必须被调用一次,但是循环会强制执行第二个调用,这就是您收到错误的原因:
read_until_close
设置streaming_callback
并返回Future
,以便您可以等待或稍后使用; read_until_close
引发异常,因为您已经在第一次迭代中设置了回调。 read_until_close
返回Future
对象,您可以await
使它起作用:
async def handle_stream(self, stream, address):
try:
await stream.read_until_close(streaming_callback=self._on_read)
except StreamClosedError:
# do something