我正在编写一个从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
无论如何我可以加快下载速度吗?
答案 0 :(得分:0)
我认为1000000mb是一次加载大的值。当所有数据缓冲到内存中时,您无法对块执行任何操作。如果文件大小小于512mb,我会将大小减小到512mb或1gb,然后块大小应该小于那个,否则你不是真正加载块,而是整个文件......如果你搜索网络仍然是你会发现它仍然是一个热门话题辩论。示例代码:
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块来过滤掉keep keep,也不需要刷新,只需直接写入文件流。