UN Gestionnaire de téléchargement est essentiellement un programme informatique dédié à la tâche de téléchargement de fichiers autonomes depuis Internet. Ici, nous allons créer un simple gestionnaire de téléchargement à l'aide de threads en Python. Grâce au multithreading, un fichier peut être téléchargé sous forme de morceaux simultanément à partir de différents threads. Pour mettre en œuvre cela, nous allons créer un outil de ligne de commande simple qui accepte l'URL du fichier puis le télécharge.
Prérequis : Machine Windows avec Python installé.
Installation
Téléchargez les packages mentionnés ci-dessous à partir de l’invite de commande.
comment trier un tableau en Java
1. Package Click : Click est un package Python permettant de créer de superbes interfaces de ligne de commande avec aussi peu de code que nécessaire. Il s'agit du kit de création d'interface de ligne de commande.
pip installer cliquez
2. Package de requêtes : Dans cet outil, nous allons télécharger un fichier basé sur l'URL (adresses HTTP). Requests est une bibliothèque HTTP écrite en Python qui vous permet d'envoyer des requêtes HTTP. Vous pouvez ajouter des en-têtes de fichiers et des paramètres de données en plusieurs parties avec de simples dictionnaires Python et accéder aux données de réponse de la même manière.
demandes d'installation pip
3. Package de threading : pour travailler avec des threads, nous avons besoin d'un package de threading.
pip installer le filetage
Mise en œuvre
Note:
Le programme a été divisé en parties pour le rendre facile à comprendre. Assurez-vous qu'il ne vous manque aucune partie du code lors de l'exécution du programme.
Étape 1 : Importer les packages requis
Ces packages fournissent les outils nécessaires pour que les requêtes Web gèrent les entrées de ligne de commande et créent des threads.
Pythonimport click import requests import threading
Étape 2 : créer la fonction de gestionnaire
Chaque thread exécutera cette fonction pour télécharger sa partie spécifique du fichier. Cette fonction est chargée de demander uniquement une plage spécifique d'octets et de les écrire à la position correcte dans le fichier.
variable Java variablePython
def 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)
Étape 3 : Définir la fonction principale avec un clic
Transforme la fonction en un utilitaire de ligne de commande. Cela définit la manière dont les utilisateurs interagissent avec le script à partir de la ligne de commande.
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):
Étape 4 : Définir le nom du fichier et déterminer la taille du fichier
Nous avons besoin de la taille du fichier pour diviser le téléchargement entre les threads et garantir que le serveur prend en charge les téléchargements à distance.
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
Étape 5 : Préallouer de l'espace fichier
La préallocation garantit que le fichier a la bonne taille avant d'écrire des morceaux dans des plages d'octets spécifiques.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'