Enkel Multithreaded Download Manager i Python
EN Nedlastingsbehandler er i utgangspunktet et dataprogram dedikert til oppgaven med å laste ned frittstående filer fra internett. Her skal vi lage en enkel nedlastingsbehandling ved hjelp av tråder i Python. Ved å bruke multi-threading kan en fil lastes ned i form av biter samtidig fra forskjellige tråder. For å implementere dette skal vi lage et enkelt kommandolinjeverktøy som godtar nettadressen til filen og deretter laster den ned.
Forutsetninger: Windows-maskin med Python installert.
Oppsett
Last ned pakkene nedenfor fra ledeteksten.
1. Klikkpakke: Klikk er en Python-pakke for å lage vakre kommandolinjegrensesnitt med så lite kode som nødvendig. Det er Command Line Interface Creation Kit.
pip installer klikk
2. Forespørselspakke: I dette verktøyet skal vi laste ned en fil basert på URL (HTTP-adresser). Requests er et HTTP-bibliotek skrevet i Python som lar deg sende HTTP-forespørsler. Du kan legge til overskrifter fra flerdelte datafiler og parametere med enkle Python-ordbøker og få tilgang til svardataene på samme måte.
pip-installasjonsforespørsler
3. Trådpakke: For å jobbe med tråder trenger vi trådpakke.
pip installer gjenger
Implementering
Note:
Programmet er delt opp i deler for å gjøre det enkelt å forstå. Pass på at du ikke mangler noen del av koden mens du kjører programmet.
Trinn 1: Importer nødvendige pakker
Disse pakkene gir de nødvendige verktøyene for å få nettforespørsler til å håndtere kommandolinjeinndata og lage tråder.
Python import click import requests import threading
Trinn 2: Opprett behandlerfunksjonen
Hver tråd vil utføre denne funksjonen for å laste ned sin spesifikke del av filen. Denne funksjonen er ansvarlig for kun å be om et spesifikt utvalg av byte og skrive dem til riktig posisjon i filen.
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 )
Trinn 3: Definer hovedfunksjonen med klikk
Gjør funksjonen til et kommandolinjeverktøy. Dette definerer hvordan brukere samhandler med skriptet fra kommandolinjen.
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 ):
Trinn 4: Angi filnavn og bestem filstørrelse
Vi trenger filstørrelsen for å dele nedlastingen mellom tråder og sikre at serveren støtter varierte nedlastinger.
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
Trinn 5: Forhåndstildel filplass
Forhåndstildeling sikrer at filen har riktig størrelse før vi skriver biter til bestemte byteområder.
Python part = file_size // number_of_threads with open ( file_name 'wb' ) as fp : fp . write ( b '