aiohttp 为什么获取响应体要加 await

下面的代码来自 aiohttp 的官方:

import aiohttp
import asyncio

async def main():

    async with aiohttp.ClientSession() as session:
        async with session.get('http://python.org') as response:

            print("Status:", response.status)
            print("Content-type:", response.headers['content-type'])

            html = await response.text()
            print("Body:", html[:15], "...")

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

为什么要获取 response.text() 需要加 await?按理来说既然 response.statusresponse.headers 都在了,那为什么 response.text() 还要等?

不考虑 body 很大以至于需要分片发送的场景,假设 body 只有 1 字节
阅读 2.5k
1 个回答

请求的payload部分是StreamReader对象的子类,所以处理的时候必须await。

看了源码,响应过来的时候,按"\r\n"分割,一部分是响应头,一部分是body。header就直接做了解析,body被封装成了一个文件流对象

关于流的部分:https://docs.python.org/zh-cn...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题