A Gestor de descàrregues és bàsicament un programa informàtic dedicat a la tasca de descarregar fitxers autònoms d'Internet. Aquí crearem un gestor de descàrregues senzill amb l'ajuda de fils a Python. Mitjançant el multi-threading, un fitxer es pot descarregar en forma de trossos simultàniament des de diferents fils. Per implementar-ho, crearem una eina de línia d'ordres senzilla que accepti l'URL del fitxer i després el descarregui.
Requisits previs: màquina Windows amb Python instal·lat.
Configuració
Baixeu els paquets esmentats a continuació des del indicador d'ordres.
1. Paquet de clics: Click és un paquet de Python per crear interfícies de línia d'ordres precioses amb el mínim codi necessari. És el kit de creació d'interfície de línia d'ordres.
pip install feu clic
2. Paquet de sol·licituds: En aquesta eina anem a descarregar un fitxer basat en l'URL (adreces HTTP). Requests és una biblioteca HTTP escrita en Python que us permet enviar sol·licituds HTTP. Podeu afegir capçaleres a fitxers i paràmetres de dades de diverses parts amb diccionaris senzills de Python i accedir a les dades de resposta de la mateixa manera.
exemple de subcadena en java
sol·licituds d'instal·lació de pip
3. Paquet de fils: per treballar amb fils necessitem el paquet de threads.
rosca d'instal·lació de pip
Implementació
Nota:
El programa s'ha dividit en parts perquè sigui fàcil d'entendre. Assegureu-vos que no us perdeu cap part del codi mentre executeu el programa.
Pas 1: importa els paquets necessaris
Aquests paquets proporcionen les eines necessàries per fer que les sol·licituds web gestionen les entrades de la línia d'ordres i creïn fils.
Pythonimport click import requests import threading
Pas 2: creeu la funció de gestor
Cada fil executarà aquesta funció per descarregar el seu fragment específic del fitxer. Aquesta funció s'encarrega de sol·licitar només un interval específic de bytes i escriure'ls a la posició correcta del fitxer.
ordenar una llista de matrius en javaPython
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)
Pas 3: definiu la funció principal amb el clic
Converteix la funció en una utilitat de línia d'ordres. Això defineix com els usuaris interactuen amb l'script des de la línia d'ordres.
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):
Pas 4: Definiu el nom del fitxer i determineu la mida del fitxer
Necessitem la mida del fitxer per dividir la descàrrega entre fils i assegurar-nos que el servidor admet descàrregues a intervals.
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
Pas 5: preassigneu l'espai de fitxers
L'assignació prèvia garanteix que el fitxer tingui la mida correcta abans d'escriure fragments en intervals de bytes específics.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'