Jednostavan višenitni upravitelj preuzimanja u Pythonu
A Upravitelj preuzimanja je u osnovi računalni program posvećen zadatku preuzimanja samostalnih datoteka s interneta. Ovdje ćemo stvoriti jednostavan Download Manager uz pomoć niti u Pythonu. Korištenjem višenitnosti datoteka se može preuzeti u obliku dijelova istovremeno iz različitih niti. Da bismo to implementirali, izradit ćemo jednostavan alat naredbenog retka koji prihvaća URL datoteke i zatim je preuzima.
Preduvjeti: Windows stroj s instaliranim Pythonom.
Postavljanje
Preuzmite dolje navedene pakete iz naredbenog retka.
1. Click paket: Click je Python paket za stvaranje prekrasnih sučelja naredbenog retka sa što manje koda koliko je potrebno. To je Command Line Interface Creation Kit.
pip instalirati klik
2. Paket zahtjeva: u ovom alatu ćemo preuzeti datoteku na temelju URL-a (HTTP adrese). Zahtjevi su HTTP biblioteka napisana u Pythonu koja vam omogućuje slanje HTTP zahtjeva. Možete dodati zaglavlja iz višedijelnih datoteka podataka i parametara s jednostavnim Python rječnicima i pristupiti podacima odgovora na isti način.
pip instalacijski zahtjevi
3. Threading paket: Za rad s nitima potreban nam je Threading paket.
pip instalacija niti
Provedba
Bilješka:
Program je podijeljen u dijelove radi lakšeg razumijevanja. Provjerite da vam ne nedostaje nijedan dio koda tijekom pokretanja programa.
Korak 1: Uvezite potrebne pakete
Ovi paketi pružaju potrebne alate kako bi web zahtjevi mogli rukovati unosima naredbenog retka i stvarati niti.
Python import click import requests import threading
Korak 2: Stvorite funkciju rukovatelja
Svaka nit će izvršiti ovu funkciju za preuzimanje svog specifičnog dijela datoteke. Ova je funkcija odgovorna za traženje samo određenog raspona bajtova i njihovo zapisivanje na ispravnu poziciju u datoteci.
Python 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 )
Korak 3: Definirajte glavnu funkciju klikom
Pretvara funkciju u uslužni program naredbenog retka. Ovo definira kako korisnici komuniciraju sa skriptom iz naredbenog retka.
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 ):
Korak 4: Postavite naziv datoteke i odredite veličinu datoteke
Potrebna nam je veličina datoteke kako bismo podijelili preuzimanje među nitima i osigurali da poslužitelj podržava različita preuzimanja.
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
Korak 5: Prethodno dodijelite prostor za datoteke
Prethodno dodjeljivanje osigurava da je datoteka ispravne veličine prije nego što zapišemo dijelove u određene raspone bajtova.
Python part = file_size // number_of_threads with open ( file_name 'wb' ) as fp : fp . write ( b '