A Lejupielādes pārvaldnieks būtībā ir datorprogramma, kas paredzēta atsevišķu failu lejupielādei no interneta. Šeit mēs izveidosim vienkāršu lejupielādes pārvaldnieku, izmantojot Python pavedienus. Izmantojot vairākus pavedienus, failu var lejupielādēt gabalos vienlaikus no dažādiem pavedieniem. Lai to ieviestu, mēs izveidosim vienkāršu komandrindas rīku, kas pieņem faila URL un pēc tam to lejupielādē.
griešanas rīks ubuntu
Priekšnosacījumi: Windows mašīna ar instalētu Python.
Iestatīšana
Lejupielādējiet tālāk minētās pakotnes no komandu uzvednes.
1. Click pakotne: Click ir Python pakotne skaistu komandrindas saskarņu izveidei ar tik maz koda, cik nepieciešams. Tas ir komandrindas interfeisa izveides komplekts.
pip instalēšanas klikšķis
2. Pieprasījumu pakotne: šajā rīkā mēs lejupielādēsim failu, pamatojoties uz URL (HTTP adreses). Pieprasījumi ir Python rakstīta HTTP bibliotēka, kas ļauj nosūtīt HTTP pieprasījumus. Varat pievienot galvenes vairāku daļu datu failiem un parametriem, izmantojot vienkāršas Python vārdnīcas, un tādā pašā veidā piekļūt atbildes datiem.
pip instalēšanas pieprasījumi
3. Vītņu pakotne: Lai strādātu ar pavedieniem, mums ir nepieciešama vītņu pakotne.
pip instalēt vītņu
Īstenošana
Piezīme:
Programma ir sadalīta daļās, lai to būtu viegli saprast. Pārliecinieties, vai programmas palaišanas laikā netrūkst nevienas koda daļas.
1. darbība: importējiet nepieciešamās pakotnes
Šīs pakotnes nodrošina nepieciešamos rīkus, lai tīmekļa pieprasījumi apstrādātu komandrindas ievadi un izveidotu pavedienus.
Pythonimport click import requests import threading
2. darbība. Izveidojiet apdarinātāja funkciju
Katrs pavediens izpildīs šo funkciju, lai lejupielādētu savu konkrēto faila daļu. Šī funkcija ir atbildīga par tikai noteikta baitu diapazona pieprasīšanu un ierakstīšanu pareizajā faila vietā.
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)
3. darbība: definējiet galveno funkciju ar klikšķi
Pārvērš funkciju par komandrindas utilītu. Tas nosaka, kā lietotāji mijiedarbojas ar skriptu no komandrindas.
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. darbība: iestatiet faila nosaukumu un nosakiet faila lielumu
Mums ir nepieciešams faila lielums, lai sadalītu lejupielādi pa pavedieniem un nodrošinātu, ka serveris atbalsta diapazona lejupielādes.
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. darbība: iepriekš piešķiriet faila vietu
Iepriekšēja piešķiršana nodrošina, ka failam ir pareizais izmērs, pirms mēs ierakstām gabalus noteiktos baitu diapazonos.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'