A İndirme Yöneticisi temel olarak internetten bağımsız dosyaları indirme görevine adanmış bir bilgisayar programıdır. Burada Python'daki thread'lerin yardımıyla basit bir İndirme Yöneticisi oluşturacağız. Çoklu iş parçacığı kullanılarak bir dosya, farklı iş parçacıklarından eş zamanlı olarak parçalar halinde indirilebilir. Bunu uygulamak için, dosyanın URL'sini kabul eden ve ardından onu indiren basit bir komut satırı aracı oluşturacağız.
Önkoşullar: Python'un yüklü olduğu Windows makinesi.
Kurmak
Aşağıda belirtilen paketleri komut isteminden indirin.
1. Click paketi: Click, gerektiği kadar az kodla güzel komut satırı arayüzleri oluşturmaya yönelik bir Python paketidir. Bu, Komut Satırı Arayüzü Oluşturma Kitidir.
pip kurulumu tıklayın
2. İstek paketi: Bu araçta URL'ye (HTTP adresleri) dayalı bir dosya indireceğiz. İstekler, Python'da yazılmış ve HTTP istekleri göndermenize olanak tanıyan bir HTTP Kitaplığıdır. Basit Python sözlükleriyle çok parçalı veri dosyalarına ve parametrelere başlıklar ekleyebilir ve yanıt verilerine aynı şekilde erişebilirsiniz.
dizeyi int java olarak yayınla
pip yükleme istekleri
3. Threading paketi: Thread'lerle çalışmak için threading paketine ihtiyacımız var.
dizede Java int
pip kurulum iş parçacığı
Uygulama
Not:
Anlaşılmasını kolaylaştırmak için program bölümlere ayrılmıştır. Programı çalıştırırken kodun herhangi bir bölümünü kaçırmadığınızdan emin olun.
Adım 1: Gerekli Paketleri İçe Aktarın
Bu paketler, web isteklerinin komut satırı girişlerini işlemesini ve iş parçacıkları oluşturmasını sağlamak için gerekli araçları sağlar.
adınaPython
import click import requests import threading
Adım 2: İşleyici İşlevini Oluşturun
Her iş parçacığı, dosyanın kendine ait bölümünü indirmek için bu işlevi yürütür. Bu işlev yalnızca belirli bir bayt aralığı istemekten ve bunları dosyadaki doğru konuma yazmaktan sorumludur.
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)
Adım 3: Tıklamayla Ana İşlevi Tanımlayın
İşlevi bir komut satırı yardımcı programına dönüştürür. Bu, kullanıcıların komut satırından komut dosyasıyla nasıl etkileşime gireceğini tanımlar.
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):
Adım 4: Dosya Adını Ayarlayın ve Dosya Boyutunu Belirleyin
İndirmeyi iş parçacıkları arasında bölmek ve sunucunun aralıklı indirmeleri desteklediğinden emin olmak için dosya boyutuna ihtiyacımız var.
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
Adım 5: Dosya Alanını Önceden Tahsis Edin
Önceden ayırma, parçaları belirli bayt aralıklarına yazmadan önce dosyanın doğru boyutta olmasını sağlar.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'