Egyszerű többszálú letöltéskezelő a Pythonban
A Letöltéskezelő alapvetően egy számítógépes program, amely önálló fájlok internetről történő letöltésére szolgál. Itt egy egyszerű Letöltéskezelőt fogunk létrehozni a Python szálai segítségével. A többszálú fájlok egyidejűleg darabok formájában tölthetők le különböző szálakból. Ennek megvalósításához egy egyszerű parancssori eszközt fogunk létrehozni, amely elfogadja a fájl URL-jét, majd letölti azt.
Előfeltételek: Windows gép Python telepítve.
Beállítás
Töltse le az alábbi csomagokat a parancssorból.
1. Click-csomag: A Click egy Python-csomag gyönyörű parancssori felületek létrehozására a szükséges számú kóddal. Ez a Command Line Interface Creation Kit.
pip telepítés kattintás
2. Kérelemcsomag: Ebben az eszközben az URL-en (HTTP-címeken) alapuló fájlt fogunk letölteni. A Requests egy Pythonban írt HTTP-könyvtár, amely lehetővé teszi HTTP-kérések küldését. Egyszerű Python-szótárak segítségével fejléceket adhat hozzá több részből álló adatfájlokhoz és paraméterekhez, és ugyanúgy hozzáférhet a válaszadatokhoz.
pip telepítési kérések
3. Menetfűző csomag: A szálakkal való munkához menetfűző csomagra van szükségünk.
pip install menetfűzés
Végrehajtás
Jegyzet:
A program részekre van osztva, hogy könnyebben érthető legyen. Győződjön meg arról, hogy a program futtatása közben a kód egyetlen része sem hiányzik.
1. lépés: Importálja a szükséges csomagokat
Ezek a csomagok biztosítják a szükséges eszközöket ahhoz, hogy a webes kérések kezeljék a parancssori bemeneteket és szálakat hozzanak létre.
Python import click import requests import threading
2. lépés: Hozza létre a kezelő függvényt
Minden szál végrehajtja ezt a funkciót a fájl saját részének letöltéséhez. Ez a funkció felelős azért, hogy csak egy meghatározott bájttartományt kérjen le és írja be a fájl megfelelő pozíciójába.
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. lépés: Határozza meg a fő funkciót kattintással
A függvényt parancssori segédprogrammá alakítja. Ez határozza meg, hogy a felhasználók hogyan lépnek kapcsolatba a parancssorral a parancssorból.
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. lépés: Állítsa be a fájlnevet és a fájlméretet
Szükségünk van a fájl méretére, hogy a letöltést a szálak között feloszthassuk, és biztosítsuk, hogy a szerver támogassa a tartományos letöltéseket.
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. lépés: Fájlterület előfoglalása
Az előfoglalás biztosítja, hogy a fájl megfelelő méretű legyen, mielőtt darabokat írnánk meghatározott bájttartományokba.
Python part = file_size // number_of_threads with open ( file_name 'wb' ) as fp : fp . write ( b '