А Менеджер завантажень це в основному комп’ютерна програма, призначена для завантаження окремих файлів з Інтернету. Тут ми збираємося створити простий менеджер завантажень за допомогою потоків на Python. Використовуючи багатопотоковість, файл можна завантажувати у вигляді фрагментів одночасно з різних потоків. Щоб реалізувати це, ми створимо простий інструмент командного рядка, який приймає URL-адресу файлу, а потім завантажує його.
Необхідні умови: машина Windows із встановленим Python.
Налаштування
Завантажте наведені нижче пакети з командного рядка.
підрядок рядка java
1. Пакет Click: Click — це пакет Python для створення красивих інтерфейсів командного рядка з мінімальною кількістю коду. Це набір для створення інтерфейсу командного рядка.
pip install click
2. Пакет запитів: у цьому інструменті ми збираємося завантажити файл на основі URL-адреси (HTTP-адреси). Requests — це бібліотека HTTP, написана мовою Python, яка дозволяє надсилати HTTP-запити. Ви можете додавати заголовки до файлів, що складаються з даних, і параметрів за допомогою простих словників Python і таким же чином отримувати доступ до даних відповіді.
запити встановлення pip
3. Пакет Threading: Для роботи з потоками нам потрібен пакет Threading.
pip install threading
Реалізація
Примітка:
dhl означає що
Програму було розділено на частини, щоб було легше зрозуміти. Переконайтеся, що ви не пропускаєте жодної частини коду під час роботи програми.
Крок 1. Імпортуйте необхідні пакети
Ці пакети надають необхідні інструменти, щоб змусити веб-запити обробляти вхідні дані командного рядка та створювати потоки.
створення списку в javaPython
import click import requests import threading
Крок 2: Створіть функцію обробки
Кожен потік виконає цю функцію, щоб завантажити певну частину файлу. Ця функція відповідає за запит лише певного діапазону байтів і запис їх у правильну позицію у файлі.
Pythondef Handler(start end url filename): headers = {'Range': f'bytes={start}-{end}'} r = requests.get(url headers=headers stream=True) with open(filename 'r+b') as fp: fp.seek(start) fp.write(r.content)
Крок 3: Визначте основну функцію за допомогою клацання
Перетворює функцію на утиліту командного рядка. Це визначає, як користувачі взаємодіють зі сценарієм із командного рядка.
Python#Note: This code will not work on online IDE @click.command(help='Downloads the specified file with given name using multi-threading') @click.option('--number_of_threads' default=4 help='Number of threads to use') @click.option('--name' type=click.Path() help='Name to save the file as (with extension)') @click.argument('url_of_file' type=str) def download_file(url_of_file name number_of_threads):
Крок 4: Встановіть назву файлу та визначте розмір файлу
Нам потрібен розмір файлу, щоб розділити завантаження між потоками та переконатися, що сервер підтримує діапазонні завантаження.
Python r = requests.head(url_of_file) file_name = name if name else url_of_file.split('/')[-1] try: file_size = int(r.headers['Content-Length']) except: print('Invalid URL or missing Content-Length header.') return
Крок 5: Попередньо розподіліть місце для файлів
Попереднє виділення гарантує, що файл має правильний розмір, перш ніж ми запишемо фрагменти в певні діапазони байтів.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'