python 在iter_chunked、iter_any、iter_chunks方法中的所有StreamReader差异

qojgxg4l  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(223)

https://docs.aiohttp.org/en/stable/streams.html文档中,有三种异步处理块响应的方法:

  • iter_chunked: Iterates over data chunks with maximum size limit
  • iter_any: Iterates over data chunks in order of intaking them into the stream
  • iter_chunks: Iterates over data chunks as received from the server

我不明白它们之间有什么区别,我应该使用什么来下载文件块。
as received from the server-这是什么意思?与iter_chunked的唯一区别是iter_chunked带有最大大小参数吗?
intaking them into the stream-它与as received from the server有何不同?

qkf9rpyu

qkf9rpyu1#

如果您知道内容的最大大小,但并非所有服务器都给予Content-Length标头(尽管响应中包含文件),则使用iter_chunked(这是因为某些服务器违反标准并实现其自己的逻辑),所以iter_chunks应该是一个任何情况下的解决方案,无论你是否知道最大大小。没有关于iter_any的线索。如果我是您,我会在测试iter_any之前先测试iter_chunks,在文档AFAIK中有这两种方法的示例
或者,您可以使用如下的while循环在aiohttp客户端下载文件:

mb=1024*1024
filename="file.bin"
async with aiohttp.ClientSession() as session:
    async with session.get(url) as response:
        async with aiofiles.open(filename,"wb") as f:
            while True:
                chunk=await response.content.read(mb)
                if not chunk:
                    break
                await f.write(chunk)

aiofiles.open()是open()的异步版本有关aiofiles的更多信息,请单击此处:https://pypi.org/project/aiofiles/

相关问题