我有一个用例,其中需要使用多个线程分部分下载大型远程文件。 每个线程必须同时(并行)运行,获取文件的特定部分。 我们的期望是在成功下载所有部件之后,将这些部件合并到一个单独的(原始)文件中。在
也许使用请求库可以完成这项工作,但是我不确定如何将其多线程化为一个将这些块组合在一起的解决方案。在
url = 'https://url.com/file.iso'
headers = {"Range": "bytes=0-1000000"} # first megabyte
r = get(url, headers=headers)
我也在考虑使用curl,让Python来安排下载,但我不确定这是正确的方法。它似乎太复杂了,并偏离了普通Python解决方案。像这样:
^{pr2}$你能解释一下吗?或者发布一个在Python3中工作的代码示例?我通常很容易找到与Python相关的答案,但这个问题的解决方案似乎让我避而远之。在
这是一个使用python3和Asyncio的版本,这只是一个例子,它可以改进,但你应该能够得到你需要的一切。在
get_size
:发送HEAD请求以获取文件的大小download_range
:下载单个块download
:下载所有的块并合并它们您可以使用grequests并行下载。在
注:我没有检查范围是否正确确定,以及下载的md5sum是否匹配!这应该只是一般性地说明它是如何工作的。在
相关问题 更多 >
编程相关推荐