A Download Manager är i grunden ett datorprogram dedikerat till uppgiften att ladda ner fristående filer från internet. Här ska vi skapa en enkel nedladdningshanterare med hjälp av trådar i Python. Genom att använda multi-threading kan en fil laddas ner i form av bitar samtidigt från olika trådar. För att implementera detta kommer vi att skapa ett enkelt kommandoradsverktyg som accepterar webbadressen till filen och sedan laddar ner den.
java-array till listan
Förutsättningar: Windows-maskin med Python installerad.
Inställning
Ladda ner nedanstående paket från kommandotolken.
1. Click package: Click är ett Python-paket för att skapa vackra kommandoradsgränssnitt med så lite kod som behövs. Det är Command Line Interface Creation Kit.
pip installera klicka
2. Requests-paket: I det här verktyget ska vi ladda ner en fil baserad på URL:en (HTTP-adresser). Requests är ett HTTP-bibliotek skrivet i Python som låter dig skicka HTTP-förfrågningar. Du kan lägga till rubriker från flerdelade datafiler och parametrar med enkla Python-ordböcker och få tillgång till svarsdata på samma sätt.
pip-installationsförfrågningar
3. Träningspaket: För att arbeta med trådar behöver vi gängpaket.
pip installera gänga
Genomförande
Notera:
Programmet har delats upp i delar för att göra det lätt att förstå. Se till att du inte saknar någon del av koden när du kör programmet.
Steg 1: Importera nödvändiga paket
Dessa paket tillhandahåller de nödvändiga verktygen för att få webbförfrågningar att hantera kommandoradsinmatningar och skapa trådar.
Pythonimport click import requests import threading
Steg 2: Skapa hanterarfunktionen
Varje tråd kommer att köra den här funktionen för att ladda ner sin specifika del av filen. Denna funktion är ansvarig för att endast begära ett specifikt intervall av byte och skriva dem till rätt 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)
Steg 3: Definiera huvudfunktionen med klick
Förvandlar funktionen till ett kommandoradsverktyg. Detta definierar hur användare interagerar med skriptet från kommandoraden.
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):
Steg 4: Ställ in filnamn och bestäm filstorlek
Vi behöver filstorleken för att dela upp nedladdningen mellan trådar och försäkra oss om att servern stöder nedladdningar med intervall.
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
Steg 5: Förallokera filutrymme
Förallokering säkerställer att filen har rätt storlek innan vi skriver bitar till specifika byteintervall.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'