为什么我应该等待 response.read(),但我不需要等待 response.status?

Why should I await response.read(), but I don't need to await response.status?

我不明白异步请求是如何工作的。这里我有一个使用 POST 请求发送图像的函数:

async def post_img(in_url, in_filepath, in_filename):
with open(in_filepath, 'rb') as file:
    in_files = {'file': file}
    async with ClientSession() as session:
        async with session.post(in_url, data=in_files) as response:
            status = response.status
            response = await response.read()
            print(response)

为什么我不用等待就可以读取响应状态?如果我不等待请求完成,我怎么知道请求已完成?

Why I can read response status without awaiting it?

因为你在写async with session.post(...)的时候就已经隐含地等待了。 async with session.post(...) as response 读取响应 header,并在 response object 中公开其数据。状态代码到达响应的最开始,可用于任何正确的响应。

您必须使用 await response.read() 等待响应 body 因为 body 的内容不是请求的一部分 object。由于 body 可以是任意大小,自动读取它可能会花费太多时间并耗尽可用内存。