从异步流读取

2024-05-14 00:03:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试扩展python异步HTTP服务器示例,该示例使用流式读写器(code)。如果我理解正确,示例处理程序将从读取器读取100个字节,并通过writer将其回传给客户机。我试图读取超过100个字节。。。一直读到没什么好读的就好了。

我试着让read()函数尽可能多地读取

data = yield from reader.read()

但这似乎永远阻止不了。所以我试着读到了EOF

while not reader.at_eof():
    data += yield from reader.read(100)

虽然这会检索更多的数据,但似乎会阻塞read调用,而不是退出while循环。

如何使用流读取器从客户端获取整个消息?


Tags: from服务器http处理程序示例readdata字节
3条回答

就像这样:

empty_bytes = b''
result = empty_bytes

while True:
    chunk = await response.content.read(8)

    if chunk == empty_bytes:
        break

    result += chunk

确定EOF的用途

if chunk == empty_bytes:

代替

if not chunk:

参见文档(aiohttp):read返回一个空字节字符串

b''

在EOF上,所以要明确地检查它。

注意:如果您希望在从服务器传递数据块时一直读取到数据块的末尾,请签出

StreamReader.readchunk()

(但没有测试。)

在开始前使用feed。

request_text = b''
while True:
    request_text += yield from self.reader.read(1024)
    self.reader.feed_eof()
    if self.reader.at_eof():
        break

您应该检查^{}是否返回空字节对象以表示EOF:

data = bytearray()
while True:
    chunk = yield from reader.read(100)
    if not chunk:
        break
    data += chunk

另外,如果您需要一个功能齐全的HTTP客户端,可以考虑使用^{}

相关问题 更多 >