A Správce stahování je v podstatě počítačový program určený ke stahování samostatných souborů z internetu. Zde vytvoříme jednoduchý Download Manager s pomocí vláken v Pythonu. Pomocí multi-threadingu lze soubor stáhnout ve formě bloků současně z různých vláken. Abychom to mohli implementovat, vytvoříme jednoduchý nástroj příkazového řádku, který přijme adresu URL souboru a poté jej stáhne.
Předpoklady: Počítač Windows s nainstalovaným Pythonem.
Nastavení
Stáhněte si níže uvedené balíčky z příkazového řádku.
1. Click package: Click je balíček Pythonu pro vytváření krásných rozhraní příkazového řádku s co nejmenším potřebným kódem. Je to sada pro tvorbu rozhraní příkazového řádku.
klikněte na instalaci pip
2. Balíček požadavků: V tomto nástroji stáhneme soubor na základě URL (adres HTTP). Requests je HTTP knihovna napsaná v Pythonu, která vám umožňuje odesílat HTTP požadavky. Pomocí jednoduchých slovníků Pythonu můžete přidávat záhlaví datových souborů s více částmi a parametry a přistupovat k datům odpovědí stejným způsobem.
požadavky na instalaci pip
3. Threading package: Pro práci s vlákny potřebujeme Threading package.
pip install závitování
Implementace
Poznámka:
Program byl rozdělen do částí, aby byl srozumitelný. Ujistěte se, že vám při běhu programu nechybí žádná část kódu.
Krok 1: Importujte požadované balíčky
Tyto balíčky poskytují potřebné nástroje k tomu, aby webové požadavky zpracovávaly vstupy z příkazového řádku a vytvářely vlákna.
Pythonimport click import requests import threading
Krok 2: Vytvořte funkci Handler
Každé vlákno provede tuto funkci, aby si stáhlo svou specifickou část souboru. Tato funkce je zodpovědná za vyžádání pouze určitého rozsahu bajtů a jejich zapsání na správnou pozici v souboru.
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)
Krok 3: Definujte hlavní funkci kliknutím
Změní funkci na nástroj příkazového řádku. To definuje, jak uživatelé interagují se skriptem z příkazového řádku.
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):
Krok 4: Nastavte název souboru a určete velikost souboru
Potřebujeme velikost souboru k rozdělení stahování mezi vlákna a zajištění, že server podporuje stahování v rozsahu.
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
Krok 5: Předběžně přidělte souborový prostor
Předběžné přidělení zajišťuje, že soubor má správnou velikost, než zapíšeme bloky do konkrétních rozsahů bajtů.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'