А Мениджър за изтегляне е основно компютърна програма, посветена на задачата за изтегляне на самостоятелни файлове от интернет. Тук ще създадем прост мениджър за изтегляне с помощта на нишки в Python. При използване на многонишков файл може да бъде изтеглен под формата на парчета едновременно от различни нишки. За да реализираме това, ще създадем прост инструмент за команден ред, който приема URL адреса на файла и след това го изтегля.
Необходими условия: Windows машина с инсталиран Python.
Настройка
Изтеглете посочените по-долу пакети от командния ред.
конвертиране на низ в json обект
1. Click package: Click е пакет на Python за създаване на красиви интерфейси на командния ред с възможно най-малко код. Това е комплектът за създаване на интерфейс на командния ред.
pip инсталирайте щракване
2. Пакет заявки: В този инструмент ще изтеглим файл въз основа на URL (HTTP адреси). Requests е HTTP библиотека, написана на Python, която ви позволява да изпращате HTTP заявки. Можете да добавяте заглавки към файлове с много части на данни и параметри с прости речници на Python и да осъществявате достъп до данните за отговор по същия начин.
заявки за инсталиране на pip
3. Пакет Threading: За да работим с нишки, се нуждаем от пакет Threading.
pip инсталирате нишки
Внедряване
Забележка:
123 филм
Програмата е разделена на части, за да бъде лесна за разбиране. Уверете се, че не пропускате нито една част от кода, докато изпълнявате програмата.
Стъпка 1: Импортирайте необходимите пакети
Тези пакети предоставят необходимите инструменти, за да накарате уеб заявките да обработват входове от командния ред и да създават нишки.
филтриращ питонPython
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'