python - 从 StreamReader 读取而不消耗
问题描述
我需要在不消耗内部缓冲区的情况下在使用创建的实例中建立StreamReader
新连接时读取。Server
asyncio.start_server
我尝试完成的第一件事是创建StreamReader
传递给处理连接的回调的对象的深层副本,但它会引发错误。
第二件事是StreamReader
通过复制缓冲区和transport
传递的StreamReader
async def _handle_req(self, reader: StreamReader, writer: StreamWriter):
reader_copy = StreamReader()
reader_copy._buffer = deepcopy(reader._buffer)
reader_copy.set_transport(reader._transport)
但是,当涉及到从中调用时readline
,reader_copy
它会引发IncompleteReadError
异常。在进行了一些调试后,我发现异常是由类的内部readuntil
函数引发的streams.py
StreamReader
(第 626 行),因为由于某种原因内部self._eof
标志设置为True
. 这发生在_wait_for_data
方法的第 515 行
...
self._waiter = self._loop.create_future()
try:
await self._waiter
finally:
self._waiter = None
因为await self._waiter
出于某种原因将其设置为True
.
是否有替代解决方案或创建副本的方法StreamReader
?
解决方案
推荐阅读
- android - 使用绑定适配器进行验证
- visual-studio - Visual Studio 执行单元测试时“文件被锁定”
- c++ - 如何用移动语义解决这个问题
- java - 如何使用从 JavaFX 中的另一个控制器发送的整数而不会收到 NumberFormatException?
- itfoxtec-identity-saml2 - 使用 ITfoxtec SAML 2.0 在 Azure 中配置 SAML 单点登录
- flutter - Flutter:如何将Listview的水平滚动条放在列表的中间?
- javascript - 在 JS 中将 EventListener 添加到 EventTarget 时,在性能方面有什么更好的?
- mysql - 在 Aurora AWS 无服务器 MySQL 上启用 SSL
- python - 带空格的不和谐命令?
- plugins - Docusaurus:在加载内容期间写入文件系统是插件的不良做法吗?