A Beheerder downloaden is in feite een computerprogramma dat zich toelegt op het downloaden van zelfstandige bestanden van internet. Hier gaan we een eenvoudige Download Manager maken met behulp van threads in Python. Met behulp van multi-threading kan een bestand tegelijkertijd in de vorm van chunks uit verschillende threads worden gedownload. Om dit te implementeren gaan we een eenvoudig opdrachtregelprogramma maken dat de URL van het bestand accepteert en het vervolgens downloadt.
Vereisten: Windows-machine waarop Python is geïnstalleerd.
Installatie
Download de hieronder genoemde pakketten vanaf de opdrachtprompt.
1. Click-pakket: Click is een Python-pakket voor het maken van prachtige opdrachtregelinterfaces met zo weinig code als nodig is. Het is de Command Line Interface Creation Kit.
pip installeren klik
2. Verzoekpakket: In deze tool gaan we een bestand downloaden op basis van de URL (HTTP-adressen). Requests is een HTTP-bibliotheek geschreven in Python waarmee u HTTP-verzoeken kunt verzenden. U kunt headers toevoegen aan meerdelige gegevensbestanden en parameters met eenvoudige Python-woordenboeken en op dezelfde manier toegang krijgen tot de antwoordgegevens.
pip-installatieverzoeken
3. Inrijgpakket: Om met draad te kunnen werken hebben we een inrijgpakket nodig.
mama kulkarni
pip installeren draadsnijden
Uitvoering
Opmerking:
Het programma is in delen opgesplitst, zodat het gemakkelijk te begrijpen is. Zorg ervoor dat u geen enkel deel van de code mist terwijl u het programma uitvoert.
Stap 1: Importeer de vereiste pakketten
Deze pakketten bieden de benodigde tools om webverzoeken opdrachtregelinvoer te laten verwerken en threads te maken.
Pythonimport click import requests import threading
Stap 2: Maak de Handler-functie
Elke thread voert deze functie uit om het specifieke deel van het bestand te downloaden. Deze functie is verantwoordelijk voor het opvragen van slechts een specifiek bereik aan bytes en het schrijven ervan naar de juiste positie in het bestand.
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)
Stap 3: Definieer de hoofdfunctie met klikken
Verandert de functie in een opdrachtregelhulpprogramma. Dit definieert hoe gebruikers vanaf de opdrachtregel met het script omgaan.
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):
Stap 4: Stel de bestandsnaam in en bepaal de bestandsgrootte
We hebben de bestandsgrootte nodig om de download over threads te verdelen en ervoor te zorgen dat de server downloads op afstand ondersteunt.
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
Stap 5: Bestandsruimte vooraf toewijzen
Door vooraf toe te wijzen zorgt u ervoor dat het bestand de juiste grootte heeft voordat we stukjes naar specifieke bytebereiken schrijven.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'