O Manager de descărcare este practic un program de calculator dedicat sarcinii de a descărca fișiere independente de pe internet. Aici vom crea un Manager de descărcări simplu cu ajutorul thread-urilor în Python. Folosind multi-threading, un fișier poate fi descărcat sub formă de bucăți simultan din fire diferite. Pentru a implementa acest lucru, vom crea un instrument simplu de linie de comandă care acceptă URL-ul fișierului și apoi îl descarcă.
Cerințe preliminare: mașină Windows cu Python instalat.
java și swing
Înființat
Descărcați pachetele menționate mai jos din promptul de comandă.
1. Pachetul Click: Click este un pachet Python pentru a crea interfețe frumoase de linie de comandă cu cât de puțin cod este necesar. Este kit-ul de creare a interfeței liniei de comandă.
faceți clic pe pip install
2. Pachetul de solicitări: În acest instrument vom descărca un fișier bazat pe URL (adresele HTTP). Requests este o bibliotecă HTTP scrisă în Python care vă permite să trimiteți solicitări HTTP. Puteți adăuga anteturi din fișiere cu mai multe părți și parametri cu dicționare Python simple și puteți accesa datele de răspuns în același mod.
solicitări de instalare pip
3. Pachetul de threading: Pentru a lucra cu fire avem nevoie de pachet de threading.
filetare pip install
Implementarea
Nota:
Programul a fost împărțit în părți pentru a fi ușor de înțeles. Asigurați-vă că nu pierdeți nicio parte a codului în timp ce rulați programul.
Pasul 1: importați pachetele necesare
Aceste pachete oferă instrumentele necesare pentru ca cererile web să gestioneze intrările din linia de comandă și să creeze fire de execuție.
123filmPython
import click import requests import threading
Pasul 2: Creați funcția de gestionare
Fiecare fir de execuție va executa această funcție pentru a descărca partea sa specifică a fișierului. Această funcție este responsabilă pentru solicitarea doar a unui anumit interval de octeți și scrierea lor în poziția corectă în fișier.
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)
Pasul 3: Definiți funcția principală cu Click
Transformă funcția într-un utilitar de linie de comandă. Aceasta definește modul în care utilizatorii interacționează cu scriptul din linia de comandă.
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):
Pasul 4: Setați numele fișierului și determinați dimensiunea fișierului
Avem nevoie de dimensiunea fișierului pentru a împărți descărcarea între fire și pentru a ne asigura că serverul acceptă descărcări variate.
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
Pasul 5: Prealocați spațiu pentru fișiere
Prealocarea asigură că fișierul are dimensiunea corectă înainte de a scrie bucăți în anumite intervale de octeți.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'