python - 提高请求的下载速度

标签 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

有什么办法可以加快下载速度吗?

最佳答案

我认为一次加载 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/

相关文章:

python - Google App Engine remote_api 使用 remote_api_shell.py 返回 404

python - 如何通过 requests-oauthlib token 获取避免 InValidClientError?

Python 无权访问此服务器/从 ZIP 返回城市/州

带有证书的python post请求

python - 如何使用 python 在 JSON 输出上显示所有字符串匹配

python - 通过 Python 使用 Watson Assistant/Watson Conversation

python - 为什么这段 Python 代码执行了两次?

python - 删除字典、列表、元组中的循环引用

Python 如何通过上下文管理器强制对象实例化?

python - 在 python 中使用 API URL 下载 xml 文件