А Довнлоад Манагер је у основи рачунарски програм посвећен задатку преузимања самосталних датотека са интернета. Овде ћемо направити једноставан Менаџер преузимања уз помоћ нити у Питхон-у. Коришћењем вишенитног рада датотека се може преузети у облику комада истовремено из различитих нити. Да бисмо ово применили, направићемо једноставну алатку командне линије која прихвата УРЛ датотеке и затим је преузима.
Предуслови: Виндовс машина са инсталираним Питхон-ом.
Сетуп
Преузмите доле наведене пакете из командне линије.
1. Кликните пакет: Цлицк је Питхон пакет за креирање прелепих интерфејса командне линије са што мање кода колико је потребно. То је комплет за креирање интерфејса командне линије.
пип инсталл кликните
2. Захтеви пакет: У овом алату ћемо преузети датотеку на основу УРЛ-а (ХТТП адресе). Захтеви су ХТТП библиотека написана у Питхон-у која вам омогућава да шаљете ХТТП захтеве. Можете додати заглавља у вишеделне датотеке и параметре са подацима са једноставним Питхон речницима и приступити подацима одговора на исти начин.
захтеви за инсталацију пип-а
3. Тхреадинг пакет: За рад са нитима потребан нам је тхреадинг пакет.
јава пример подниза
пип инсталл тхреадинг
Имплементација
Напомена:
Програм је подељен на делове да би се лакше разумео. Уверите се да вам не недостаје ниједан део кода док покрећете програм.
Корак 1: Увезите потребне пакете
Ови пакети обезбеђују неопходне алате да би веб захтеви руковали уносима командне линије и креирали нити.
Pythonimport click import requests import threading
Корак 2: Креирајте функцију руковаоца
Свака нит ће извршити ову функцију да преузме свој одређени део датотеке. Ова функција је одговорна за тражење само одређеног опсега бајтова и њихово уписивање на исправну позицију у датотеци.
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: Дефинишите главну функцију кликом
Претвара функцију у услужни програм командне линије. Ово дефинише начин на који корисници комуницирају са скриптом из командне линије.
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: Подесите име датотеке и одредите величину датотеке
Потребна нам је величина датотеке да бисмо поделили преузимање између нити и осигурали да сервер подржава преузимање у опсегу.
тостринг метод јава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: Унапред додијелите простор датотеке
Претходно додељивање обезбеђује да је датотека исправне величине пре него што запишемо делове у одређене опсеге бајтова.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'