A Download Manager on pohjimmiltaan tietokoneohjelma, joka on omistettu itsenäisten tiedostojen lataamiseen Internetistä. Täällä aiomme luoda yksinkertaisen lataushallinnan Pythonin säikeiden avulla. Monisäikeisyyden avulla tiedosto voidaan ladata paloina samanaikaisesti eri säikeistä. Tämän toteuttamiseksi luomme yksinkertaisen komentorivityökalun, joka hyväksyy tiedoston URL-osoitteen ja lataa sen sitten.
Edellytykset: Windows-kone, jossa Python asennettuna.
Asennus
Lataa alla mainitut paketit komentokehotteesta.
1. Click-paketti: Click on Python-paketti kauniiden komentoriviliittymien luomiseen niin pienellä koodilla kuin tarpeen. Se on Command Line Interface Creation Kit.
pip asennus napsauta
voi abstraktilla luokalla olla rakentaja
2. Pyyntöpaketti: Tällä työkalulla aiomme ladata tiedoston URL-osoitteen (HTTP-osoitteiden) perusteella. Requests on Pythonilla kirjoitettu HTTP-kirjasto, jonka avulla voit lähettää HTTP-pyyntöjä. Voit lisätä otsikoita moniosaisiin tietotiedostoihin ja parametreihin yksinkertaisilla Python-sanakirjoilla ja käyttää vastaustietoja samalla tavalla.
pip-asennuspyynnöt
3. Pujotuspaketti: Tarvitsemme lankojen kanssa työskentelyyn langoituspaketin.
pip asennus kierteitys
Toteutus
Huomautus:
Ohjelma on jaettu osiin, jotta se olisi helppo ymmärtää. Varmista, että et menetä mitään koodin osaa ohjelman suorittamisen aikana.
Vaihe 1: Tuo vaaditut paketit
Nämä paketit tarjoavat tarvittavat työkalut, joiden avulla verkkopyynnöt voivat käsitellä komentorivisyöttöjä ja luoda säikeitä.
Pythonimport click import requests import threading
Vaihe 2: Luo Käsittelijäfunktio
Jokainen säiettä suorittaa tämän toiminnon ladatakseen tietyn osan tiedostosta. Tämä toiminto vastaa vain tietyn tavualueen pyytämisestä ja kirjoittamisesta oikeaan paikkaan tiedostossa.
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)
Vaihe 3: Määritä päätoiminto napsauttamalla
Muuttaa toiminnon komentorivityökaluksi. Tämä määrittää, kuinka käyttäjät ovat vuorovaikutuksessa komentosarjan kanssa komentoriviltä.
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):
Vaihe 4: Aseta tiedostonimi ja määritä tiedostokoko
Tarvitsemme tiedostokoon jakaaksemme latauksen säikeiden kesken ja varmistaaksemme, että palvelin tukee vaihtelevia latauksia.
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
Vaihe 5: Varaa etukäteen tiedostotila
Esivaraus varmistaa, että tiedosto on oikean kokoinen, ennen kuin kirjoitamme paloja tietyille tavualueille.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'