提高请求的下载速度

时间:2016-06-01 14:24:05

标签: python python-requests

我正在编写一个从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

无论如何我可以加快下载速度吗?

1 个答案:

答案 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,也不需要刷新,只需直接写入文件流。