Конкурентный загрузчик с докачкой и возобновлением: быстро, надёжно, с прогресс‑барами и graceful shutdown.
Войдите, чтобы начать проектВы — аналитик данных в исследовательском институте. Вам поручили проанализировать огромный открытый набор данных о климатических изменениях за последние 50 лет. Данные хранятся на правительственном сервере, но не в виде единого архива, а как тысячи отдельных .csv файлов. Каждый файл содержит данные по отдельному региону за конкретный месяц. У вас есть только текстовый файл со списком из тысяч URL.
Проблема? Сервер старый, соединение с ним медленное и часто обрывается. Скачивать файлы по одному — значит потратить несколько дней. А любой сбой сети заставит вас начинать всё сначала, теряя часы прогресса.
Вам нужен профессиональный инструмент, который справится с этой задачей быстро и надёжно. Программа, которая сможет:
Вы когда-нибудь задумывались, как работают менеджеры загрузок вроде aria2 или Wget? Они не просто скачивают файлы от начала до конца. Их магия — в умении разбивать большие файлы на части, скачивать их одновременно в несколько потоков и, что самое важное, возобновлять загрузку после сбоя сети или перезагрузки компьютера. Если оборвалось 99% загрузки 10-гигабайтного файла, вам не придется начинать всё сначала.
В этом проекте мы создадим собственную версию такой утилиты. Мы разработаем продвинутую консольную программу, которая конкурентно загружает файлы по списку URL. Её главной особенностью станет поддержка докачки (resumable downloads). Наша утилита будет скачивать файлы по частям, сохранять прогресс и уметь возобновлять прерванную загрузку с точного места обрыва, прямо как профессиональные инструменты.
Мы разработаем продвинутую консольную утилиту, которая конкурентно загружает файлы по списку URL. Главной особенностью станет поддержка докачки (resumable downloads). Утилита будет скачивать файлы по частям, сохранять прогресс и уметь возобновлять прерванную загрузку с точного места обрыва.
HEAD, Content-Length, Accept-Ranges и Range для проверки поддержки докачки и скачивания файлов по частям; потоковая работа с данными (io.Reader, io.Copy).os.Seek.retry).