为什么 aiohttp 响应的 json() 方法需要等待?

Why does the json() method of an aiohttp response require await?

我不明白为什么 resp.json() 需要等待。根据我的理解,async/await 在处理 I/O 时很有用。但是,当我在下面的示例中调用 resp.json() 时,网络请求是否尚未在上面的行中用 session.get() 处理?

async with session.get('https://api.github.com/events') as resp:
    print(await resp.json())

But when I call resp.json() in the example below, has the web request not already been processed with session.get() in the line above?

不,它只读取 HTTP headers,要获得响应 body 您需要 read 响应的其余部分。

这非常有用,因为您可以检查 HTTP headers 并避免读取响应的其余部分,比如说,如果服务器返回了错误的 HTTP 代码。

另一个例子:如果您希望响应 body 很大,您可以分块读取它以避免 RAM 过度使用(检查 note here)。