EN Download Manager er dybest set et computerprogram dedikeret til opgaven med at downloade enkeltstående filer fra internettet. Her skal vi lave en simpel Download Manager ved hjælp af tråde i Python. Ved at bruge multi-threading kan en fil downloades i form af bidder samtidigt fra forskellige tråde. For at implementere dette skal vi oprette et simpelt kommandolinjeværktøj, som accepterer webadressen til filen og derefter downloader den.
attribut fejl python
Forudsætninger: Windows-maskine med Python installeret.
Opsætning
Download nedenstående pakker fra kommandoprompten.
1. Klikpakke: Click er en Python-pakke til at skabe smukke kommandolinjegrænseflader med så lidt kode som nødvendigt. Det er Command Line Interface Creation Kit.
pip installation klik
2. Anmodningspakke: I dette værktøj skal vi downloade en fil baseret på URL'en (HTTP-adresser). Requests er et HTTP-bibliotek skrevet i Python, som giver dig mulighed for at sende HTTP-anmodninger. Du kan tilføje overskrifter fra datafiler og parametre i flere dele med simple Python-ordbøger og få adgang til svardataene på samme måde.
pip installationsanmodninger
3. Gevindpakke: For at arbejde med tråde har vi brug for gevindpakke.
pip installer gevind
konverter streng til int java
Implementering
Note:
Programmet er opdelt i dele for at gøre det let at forstå. Sørg for, at du ikke mangler nogen del af koden, mens du kører programmet.
Trin 1: Importer nødvendige pakker
Disse pakker giver de nødvendige værktøjer til at få webanmodninger til at håndtere kommandolinje-input og oprette tråde.
flyde til snorPython
import click import requests import threading
Trin 2: Opret Handler-funktionen
Hver tråd vil udføre denne funktion for at downloade sin specifikke del af filen. Denne funktion er ansvarlig for kun at anmode om et specifikt udvalg af bytes og skrive dem til den korrekte position i filen.
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)
Trin 3: Definer hovedfunktionen med klik
Gør funktionen til et kommandolinjeværktøj. Dette definerer, hvordan brugere interagerer med scriptet fra kommandolinjen.
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):
Trin 4: Indstil filnavn og bestem filstørrelse
Vi har brug for filstørrelsen for at opdele overførslen mellem tråde og sikre, at serveren understøtter overførsler med rækkevidde.
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
Trin 5: Forallok filplads
Forallokering sikrer, at filen har den korrekte størrelse, før vi skriver chunks til specifikke byteområder.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'