使用python requests模块下载大文件时,建议使用strea模式.
默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况.
当把get函数的stream参数设置成True时,它不会立即开始下载,当你使用iter_content或iter_lines遍历内容或访问内容属性时才开始下载。需要注意一点:文件没有下载之前,它也需要保持连接。
- iter_content:一块一块的遍历要下载的内容
- iter_lines:一行一行的遍历要下载的内容
使用上面两个函数下载大文件可以防止占用过多的内存,因为每次只下载小部分数据。
示例代码(下载某个视频):
# 下载视频
mp4url = 'https://vodcdn.idongde.com/provider/0/2021/10/26/171942wlr0t/sd/0d4b0238d1d08244946268e9bf4f84cd.mp4'
# 发起请求
dmp4 = requests.get(mp4url, stream=True)
print('视频下载请求状态:', dmp4.status_code)
with open('mp4.mp4', 'wb') as mp4f:
# 使用iter_content遍历内容 1024 为每次读取字节长度 可自定义
for i in dmp4.iter_content(1024):
mp4f.write(i)