Библиотека 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 байта (или любой другой размер, который вы укажете). Это позволяет загружать большие файлы, не перегружая оперативную память.
Добавить комментарий