我正在编写一个从 Dropbox 下载一些视频的脚本。通常我的下载速度约为 150 kb/秒,这是在 Firefox 或 IDM 上使用普通下载器时的情况。但使用此 Python 脚本时,速度变得太慢:不到 10 kb/秒。
这是我正在使用的代码:
def download(url,i):
local_filename = "video_" + str(i) + ".mp4"
# NOTE the stream=True parameter
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
n = 0
for chunk in r.iter_content(chunk_size=1000000):
if chunk: # filter out keep-alive new chunks
n = n +1
f.write(chunk)
print "downloading " + str(n)
f.flush()
return local_filename
有什么办法可以加快下载速度吗?
最佳答案
我认为一次加载 1000000mb 的值太大了。当所有数据都缓冲到内存中时,您无法对 block 执行任何操作。如果文件大小小于 512mb,那么我会将大小减小到 512mb 或 1gb,那么 block 大小应该小于该值,否则您并不是真正加载 block ,而是加载整个文件...如果您在网上搜索你会发现这仍然是一个热门话题辩论。示例代码:
def download(url,i):
local_filename = "video_" + str(i) + ".mp4"
with open(local_filename, 'wb') as f, closing(requests.get(url, stream=True)) as res:
for n, chunk in enumerate(res.iter_content(chunk_size=512), start=1):
f.write(chunk)
print "downloading " + str(n)
return local_filename
advance docs建议在流式传输时将其包装在结束上下文中。它应该稳定请求。不需要if chunk来过滤掉keepalived,也不需要flush,直接写入文件流即可。
关于python - 提高请求的下载速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37571466/