Библиотека Requests для Python — это мощный инструмент для работы с HTTP-запросами. Она очень удобна в использовании и позволяет выполнять множество операций, таких как отправка HTTP-запросов, обработка ответов и, что самое главное, загрузка файлов из интернета.
Однако, при загрузке больших файлов (больше 1 ГБ) могут возникнуть проблемы. Причина в том, что весь файл пытается загрузиться в оперативную память, что может привести к ее исчерпанию.
Возьмем для примера следующий код:
import requests
def download_file(url):
local_filename = url.split('/')[-1]
r = requests.get(url)
f = open(local_filename, 'wb')
for chunk in r.iter_content(chunk_size=512 * 1024):
if chunk:
f.write(chunk)
f.close()
В этом коде используется метод iter_content(), который позволяет читать файл по частям (или «по кускам»). Размер каждого «куска» определяется параметром chunk_size, заданным в байтах. Однако, несмотря на это, весь файл все равно загружается в память перед записью на диск.
Чтобы решить эту проблему, необходимо использовать параметр stream в функции requests.get(). Параметр stream позволяет загружать файл по частям, не загружая его целиком в память. Вот как это можно сделать:
import requests
def download_file(url):
local_filename = url.split('/')[-1]
with requests.get(url, stream=True) as r:
r.raise_for_status()
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
Теперь, при использовании этой функции, файл будет загружаться по частям размером в 8192 байта (или любой другой размер, который вы укажете). Это позволяет загружать большие файлы, не перегружая оперативную память.
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий