首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >aiohttp:快速并行下载大型文件

aiohttp:快速并行下载大型文件
EN

Stack Overflow用户
提问于 2022-09-20 15:33:48
回答 1查看 218关注 0票数 0

我正在使用aiohttp下载大型文件(每个~150‘m 200’m)。

目前,我正在对每个文件进行如下操作:

代码语言:javascript
运行
复制
async def download_file(session: aiohttp.ClientSession, url: str, dest: str):
    chunk_size = 16384
    async with session.get(url) as response:
        async with aiofiles.open(dest, mode="wb") as f:
            async for data in response.content.iter_chunked(chunk_size):
                await f.write(data)

我创建这个协同机制的多个任务来实现并发。我想知道:

chunk_size

  • Is调用iter_chunked(chunk_size)的最佳价值是什么比只执行data = await response.read()并将其写入磁盘更好?在这种情况下,我如何报告下载进度?

  • ,我应该创建多少任务?

  • 是否有方法并行下载同一文件的多个部分,这是aiohttp已经做过的事情吗?
EN

回答 1

Stack Overflow用户

发布于 2022-09-30 15:24:29

块大小的

  1. 选择取决于您想要在内存中的内容。如果RAM为4GB,那么512 MB或1GB的块大小就可以了。但是,如果RAM为1GB,则可能不需要1GB的块大小。因此,您应该根据可用内存设置chunk_size .

  1. 您应该创建与要并行处理的下载文件一样多的任务。这完全取决于你和你的用例。

  1. --它不会在内部处理,而是在包中读取文件。但是,您可以做的是将一个HEAD请求获取到请求文件的Content-Length的服务器,细分文件大小,并行地向服务器请求每个部分,然后自己合并。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73789244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档