我正在使用龙卷风开发python应用程序,我想在其中持续监听客户端发送的数据。 这是我的代码:
async def handle_stream(self, stream, address):
try:
while True:
data = stream.read_bytes(1024, callback = self._on_read, partial = True)
print(data)
stream.write(data)
except StreamClosedError:
logger.error("%s disconnected", address)
但是我面临以下问题:
stream.write(data)
出现以下错误,tornado.application:回调函数functools.partial(.null_wrapper位于0x7fd3ddf2ce18>处的异常, exception = AssertionError('已读',)>) 追溯(最近一次通话): 文件“ /venv/lib/python3.6/site-packages/tornado/ioloop.py”,行758,在 _run_callback ret = callback() 文件“ /venv/lib/python3.6/site-packages/tornado/stack_context.py”,行 300,在null_wrapper中 返回fn(* args,** kwargs) 文件“ /server.py”,第143行,位于 lambda f:f.result()) 文件“ /server.py”,第90行,在handle_stream中 数据= stream.read_bytes(1024,回调= self._on_read,部分= True) 文件“ /venv/lib/python3.6/site-packages/tornado/iostream.py”,第432行 read_bytes 未来=自我._set_read_callback(回调) 文件“ /venv/lib/python3.6/site-packages/tornado/iostream.py”,在第859行中 _set_read_callback 断言self._read_callback为None,“已读” AssertionError:已经阅读
答案 0 :(得分:1)
您尝试通过回调和Future两种不兼容的方法获取数据。该错误不在stream.write中,而是在您通过回调第二次调用stream.read_bytes时。
与callbacks are deprecated一样,最好的是利用未来。就是这样:
async def handle_stream(self, stream, address):
try:
while True:
data = await stream.read_bytes(1024, partial = True)
print(data)
# stream.write(data)
except StreamClosedError:
logger.error("%s disconnected", address)
此外,stream.write会将数据写回到同一流。这真的是您想要做的吗?