Preprost večnitni upravitelj prenosov v Pythonu
A Upravitelj prenosov je v bistvu računalniški program, namenjen prenosu samostojnih datotek iz interneta. Tukaj bomo ustvarili preprost upravitelj prenosov s pomočjo niti v Pythonu. Z uporabo večnitnosti je mogoče datoteko prenesti v obliki kosov hkrati iz različnih niti. Za izvedbo tega bomo ustvarili preprosto orodje ukazne vrstice, ki sprejme URL datoteke in jo nato prenese.
Predpogoji: stroj Windows z nameščenim Pythonom.
Nastavitev
Prenesite spodaj navedene pakete iz ukaznega poziva.
1. Paket Click: Click je paket Python za ustvarjanje čudovitih vmesnikov ukazne vrstice s čim manj kode, kot je potrebno. To je komplet za ustvarjanje vmesnika ukazne vrstice.
pip namestite klik
2. Paket zahtev: V tem orodju bomo prenesli datoteko na podlagi URL-ja (HTTP naslovi). Requests je knjižnica HTTP, napisana v Pythonu, ki vam omogoča pošiljanje zahtev HTTP. S preprostimi slovarji Python lahko dodate glave iz podatkovnih večdelnih datotek in parametrov ter dostopate do odzivnih podatkov na enak način.
zahteve za namestitev pip
3. Paket Threading: Za delo z nitmi potrebujemo paket Threading.
pip namestitev navojev
Izvedba
Opomba:
Program je zaradi lažjega razumevanja razdeljen na dele. Prepričajte se, da vam med izvajanjem programa ne manjka noben del kode.
1. korak: uvozite zahtevane pakete
Ti paketi zagotavljajo potrebna orodja, s katerimi lahko spletne zahteve obravnavajo vnose ukazne vrstice in ustvarjajo niti.
Python import click import requests import threading
2. korak: Ustvarite funkcijo obravnave
Vsaka nit bo izvedla to funkcijo za prenos določenega dela datoteke. Ta funkcija je odgovorna za zahtevanje samo določenega obsega bajtov in njihovo pisanje na pravilno mesto v datoteki.
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 )
3. korak: Določite glavno funkcijo s klikom
Funkcijo spremeni v pripomoček ukazne vrstice. To določa, kako uporabniki komunicirajo s skriptom iz ukazne vrstice.
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 ):
4. korak: Nastavite ime datoteke in določite velikost datoteke
Potrebujemo velikost datoteke, da razdelimo prenos med niti in zagotovimo, da strežnik podpira prenose v razponu.
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
5. korak: vnaprej dodelite prostor za datoteke
Vnaprejšnja dodelitev zagotavlja, da je datoteka pravilne velikosti, preden zapišemo kose v določene obsege bajtov.
Python part = file_size // number_of_threads with open ( file_name 'wb' ) as fp : fp . write ( b '