Ana içeriğe geç

Python’da İlerleme Çubukları: Örneklerle Tam Kılavuz

tqdm, progressbar2, alive-progress ve Tkinter kullanarak Python ilerleme çubukları oluşturmayı; daha iyi UX ve uygulama performansı için en iyi uygulamaları öğrenin.
· 13 dk. oku

Yapay Zeka ile Keşfedin

Günümüz uygulamalarında kullanıcılar, özellikle de görevlerin tamamlanması uzun sürdüğünde, anında geri bildirim bekler. Python ilerleme çubukları, arka planda bir şeylerin olduğunu göstermenin açık ve kolay bir yoludur. Güçlü bir ilerleme çubuğu, programın daha hızlı hissettirmesini sağlar, profesyonel bir dokunuş katar ve kullanıcı dostluğunu artırır. 

Bu yazıda, tqdm, progress, progressbar2, alive-progress ve Tkinter gibi popüler kütüphaneleri kullanarak Python ilerleme çubuklarını nasıl uygulayacağınızı, ayrıca kullanıcı deneyimini ve uygulama performansını iyileştirmeye yönelik en iyi uygulamaları öğreneceksiniz.

Python kavramlarını uygulamalı şekilde öğrenmek için Python Programlama Temelleri beceri yolumuzu inceleyin. 

Özet

  • Komut satırı araçları için tqdm ilk tercihtir — hafiftir ve pandas ile iyi çalışır. Basit betikler için progress, özel yerleşimlere ihtiyaç duyduğunuzda progressbar2 veya animasyonlu görseller için alive-progress kullanın.

  • Masaüstü uygulamaları için Tkinter’ın yerleşik ttk.Progressbar bileşeni, süresi belli görevleri (belirli/“determinate”) ve ucu açık olanları (belirsiz/“indeterminate”) destekler.

  • Hızlı döngülerde güncellemeleri seyrekleştirin ki yavaşlatmasın; ayrıca çubuğu herkes için faydalı kılmak amacıyla grafiklerle birlikte yüzde ya da sayaç gibi metinler kullanın.

Python’da İlerleme Çubukları Nedir?

İlerleme çubukları her yerde karşımıza çıkar. Sıklıkla dosya indirmeleri, yazılım kurulumları ve ETL boru hatları için kullanılır. Makine öğrenimi modeli eğitiminin ilerlemesini izlemek için de faydalıdırlar.

İlerleme çubuğu, bir görevin ne kadarının tamamlandığını ve ne kadarının kaldığını gösterir. Komut satırı arayüzünde (CLI) metin olarak ya da grafik kullanıcı arayüzünde (GUI) görsel bir çubuk olarak görünebilir.

İlerleme çubukları kullanıcı deneyimini iyileştirir. Kullanıcılara sürece dair gerçek zamanlı güncellemeler verir. Gecikme olduğunda kullanıcılar müdahale edip etmeyeceklerine karar verebilir. Bu görünürlük, hayal kırıklığını azaltır ve bekleme sürelerini daha kısa hissettirir. Kullanıcılar, ekranda hiçbir şey olmuyormuş gibi görünen bir görüntüye bakmak zorunda kalmaz; süreçte kalır ve ilerleme olduğuna dair güven duyar.

Geliştiriciler uygulama performansını izlemek için ilerleme çubuklarını kullanır. Darboğazları belirlemeye, kodu kıyaslamaya (benchmark) ve görev süresini takip etmeye yardımcı olurlar. Betiklerde ve iş akışlarında ilerleme çubukları net durum güncellemeleri sağlar. Uzun süren süreçlerin daha iyi anlaşılmasına yardımcı olur. Etkileşimli araçların ve defterlerin (notebook) kullanılabilirliğini de artırır.

İlerleme çubukları basit bir performans izleme biçimi olarak da hizmet edebilir. Her görevin ne kadar sürdüğünü gösterirler. Bu, geliştiricilerin yavaş aşamaları fark etmesine ve verimliliği ölçmesine yardımcı olur. Böylece farklı uygulamaları kolayca karşılaştırabilirsiniz. 

Komut Satırı İlerleme Çubukları

Komut satırı ilerleme çubukları, uzun süren görevlere doğrudan terminalde görsel geri bildirim sağlayarak betikleri daha bilgilendirici ve kullanıcı dostu kılar. Python hız, özelleştirme ve görsel stil açısından farklı güçlü yönlere sahip birkaç kütüphane sunar. Dördüne bakacağız: tqdm, progress, progressbar2 ve alive-progress. 

Tqdm: Hız ve sadelik için standart

tqdm, Python’da ilerleme çubukları oluşturmak için popüler bir kütüphanedir. Döngüler ve yinelenebilirler (iterable) için hızlı ve çok yönlü ilerleme göstergeleri sağlar. Yinelemeleri izler; kalan ve geçen süreyi hesaplar. Bu bilgiler çubuğu gerçek zamanlı günceller. tqdm arka planda çalışır. Kalan süreyi tahmin eder ve gereksiz güncellemeleri atlar. Öğrenmesi kolaydır, bellek kullanımı hafiftir ve güçlü bir topluluk tarafından desteklenir. 

Kurulum süreci

tqdm’yi kurmanın kolay bir yolu pip yükleyicisini kullanmaktır. Terminalde aşağıdaki komutu yazın.

pip install tqdm

Kütüphanenin doğru kurulduğundan emin olmak için sürüm numarasını yazdırın.

import tqdm
print(tqdm.__version__)

4.67.1

tqdm’in temel kullanımı

tqdm kullanımı basittir. Kütüphaneyi içe aktarın. Bir ilerleme çubuğu göstermek için herhangi bir yinelenebilir nesneyi tqdm(iterable) ile sarmalayın.

Kolaylık olması için tqdm(range(n)) yazmak yerine kısaltma olarak trange(n) kullanabilirsiniz.

from tqdm import trange
import time

for _ in trange(100, desc="Processing"):
    # Do stuff here
    time.sleep(0.05)  # simulate a task

Bu kod, çalışma sırasında canlı bir ilerleme çubuğu üretir.

İlerleme çubuğu şunları gösterir

  • Tamamlanma yüzdesi (%%22)
  • Toplam içinden tamamlanan yineleme sayısı (224/1000)
  • Geçen süre ve tahmini kalan süre (12 saniye geçti, 42 saniye kaldı)
  • Saniye başına yineleme (18.09 it/s).

İlerleme çubuğuna bir açıklama eklemek için desc seçeneğini belirtin.

for i in trange(1000, desc='Processing'):  # description
    # Simulate a task
    time.sleep(0.05)

İç içe ilerleme çubukları 

tqdm’de iç içe ilerleme çubukları, birden fazla döngüde ilerlemeyi takip etmenize yardımcı olur. Birden çok çalışma aşamasını izlemek gerektiğinde de kullanışlıdır. Örnekler arasında yığın (batch) işleme, iç içe döngüler ve model eğitimi sayılabilir. 

Her döngüyü tqdm ile sarmalayın. Görünümü kontrol etmek için position ve leave argümanlarını kullanın.

  • position: Her ilerleme çubuğunun dikey konumunu ayarlar. position=0 en üstteki çubuktur, position=1 onun altında görünür, vb.
  • leave: leave=True ise, ilerleme çubuğu tamamlandıktan sonra ekranda kalır. leave=False ise, kalabalığı önlemek için kaybolur.
for i in trange(3, desc='Outer loop', leave=True):
    for j in trange(5, desc='Inner loop', leave=False):
        for j in trange(4, desc='Inner inner loop', leave=False):
            time.sleep(0.05)

İç içe ilerleme çubukları net bir hiyerarşi gösterir. Görevin farklı aşamalarını görselleştirmenize yardımcı olur. Çeşitli düzeylerde ayrıntılı içgörüler sağlar. Bu, geliştiricilerin yavaşlamaları veya darboğazları kolayca belirlemesine yardımcı olur.

Pandas entegrasyonu

Tqdm, pandas ile iyi bütünleşir. DataFrame ve seri görevlerine ilerleme çubuğu eklemek için basit bir yol sunar. apply, groupby ve map gibi işlevler için gerçek zamanlı ilerleme gösterir. Bu işlevler, büyük veri kümelerinde yavaş olabilir.

Bu özelliği etkinleştirmek için tqdm.pandas() çağrısı yapın. Ardından pandas’ın normal apply yöntemi yerine progress_apply kullanın. Bu, işleviniz satırlar veya sütunlar üzerinde çalışırken bir ilerleme çubuğu gösterecektir. Kodu yeniden yazmadan işlemin ilerlemesini görürsünüz.

Aşağıdaki programda, "numbers" adlı bir sütuna sahip bir DataFrame oluşturuyoruz. Bu sütun 0’dan 1000’e kadar tamsayılar içerir. Ardından slow_squared adı verilen “yavaş” bir işlemi uygulayarak yeni bir sütun üretiyoruz. 

Standart pandas apply işlevi yerine tqdm’den progress_apply kullanıyoruz. İşlem sırasında bir ilerleme çubuğu belirir. Ne kadar işlemenin tamamlandığına dair gerçek zamanlı güncellemeler verir.

import pandas as pd
from tqdm import tqdm
import time

# Simulate a time-consuming operation
def slow_square(x):
    time.sleep(0.01)
    return x**2

# Create a sample DataFrame
df = pd.DataFrame({'numbers': range(1000)})

# Initialize tqdm for pandas
tqdm.pandas(desc="Processing")

# Use progress_apply instead of apply
df['slow_squared'] = df['numbers'].progress_apply(slow_square)
# Print the result
print(df.head())

Kodun çıktısı aşağıdaki gibidir.

progress_apply’i groupby gibi diğer DataFrame işlemleri için de kullanabiliriz.

grouped = df.groupby('numbers').progress_apply(lambda g: g.sum())

Özelleştirme seçenekleri

Tqdm, ilerleme çubuklarını farklı ortam ve kullanıcı gereksinimlerine uyacak şekilde özelleştirmenize olanak tanır. Genişliği ncols ile ayarlayabilirsiniz. bar_format argümanı metin yerleşimini tamamen kontrol etmenizi sağlar. Ayrıca dynamic_ncols=True ayarı, çubuğun terminale sığacak şekilde otomatik boyutlandırılmasını sağlar.

tqdm’e özgü performans değerlendirmeleri

Tqdm hızlı ve hafiftir. Hızlı döngülerde bile düşük ek yük (overhead) ekler. disable=True ile ilerleme çubuklarını devre dışı bırakabilirsiniz. Bu, performansın kritik olduğu üretim ortamlarında faydalıdır. Hızlı döngülerde çubuğu her seferinde güncellemek fazla olabilir. Bu nedenle tqdm, güncelleme sıklığını kontrol etmenize izin verir. mininterval ve maxinterval gibi parametreleri kullanabilirsiniz. 

Progress: Özelleştirilebilir stiller ve döndürücüler (spinner)

Python’daki Progress kütüphanesi, komut satırı için metin tabanlı ilerleme çubuklarını kolayca oluşturmanıza olanak tanır. Basit bir API’ye sahiptir. Hem ilerleme çubuklarını hem de döndürücüleri destekler ve temel çıktı özelleştirmesine izin verir. Küçük, hızlıdır ve bağımlılığı yoktur. Bu da onu hızlı betikler ve basit kurulumlar için harika kılar. 

progress kütüphanesi yedi yerleşik ilerleme çubuğu stili içerir: Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar ve Shadybar. 

Kurulum için pip install kullanın.

pip install progress

Kullanmak için, istediğiniz stili içe aktarın, bir değişken oluşturun, döngüde .next() ve işlem bittiğinde .finish() kullanın. Örneğin ChargingBar kullanmak için aşağıdaki kodu kullanın.

import time
from progress.bar import ChargingBar
bar = ChargingBar('Processing', max=20)
for i in range(20):
    # Do some work
    time.sleep(0.5)
    
    bar.next()
bar.finish()
`

Progress, süresi bilinmeyen görevler için döndürücüler de içerir. Bir döndürücü uygulamanın kodu basittir.

import time
from progress.spinner import Spinner

spinner = Spinner('Processing... ')

# Spinner during a task of unknown duration.
for _ in range(50): 
    # Do stuff 
    time.sleep(0.1)  # simulate a running task

    spinner.next()

spinner.finish()

Bu kod, açıklamanın ("Processing…") ardından bir döndürücüyle sonuçlanır.

progress kütüphanesi basit ve hafiftir, ancak dikkate alınması gereken bazı sınırlamaları vardır. Jupyter notebook’larını desteklemez ve dinamik olarak yeniden boyutlanamaz. Ayrıca, tqdm gibi kütüphanelere kıyasla daha az özelleştirme seçeneği sunar. Temel komut satırı görevlerinde iyi çalışır, ancak karmaşık veya yüksek performanslı işlerde zorlanabilir.

Progressbar2: Gelişmiş özelleştirme ve uyumluluk

Progressbar2 güçlü bir Python kütüphanesidir. Komut satırı uygulamaları için esnek ve özelleştirilebilir ilerleme çubukları oluşturmanıza yardımcı olur. Yüzde, ETA, animasyonlu işaretçiler ve sayaçlar gibi birçok widget’a sahiptir. Bu da onu daha karmaşık veya cilalı CLI görevleri için harika kılar. 

Progressbar2, progress gibi daha basit kütüphanelerden daha fazla kontrol ve biçimlendirme seçeneği sunar. Günlük kaydı (logging) ve çok iş parçacıklı iş akışlarıyla da daha iyi çalışır.

Kurulum için pip install kullanın.

pip install progressbar2

progressbar2’deki ProgressBar sınıfı mevcut ilerleme durumunu gösterir. Bunu, özelleştirilebilir bir dizi widget ile yapar. 

Widget, ilerleme çubuğunun durumuna göre güncellenen modüler bir parçadır. Buna tamamlanma yüzdesi, geçen süre ve tahmini kalan süre dahildir. 

Metin etiketleri, ilerleme işaretleyicileri, sayaçlar, zamanlayıcılar, döndürücüler ve özel biçimlendiriciler gibi birçok widget türü arasından seçim yapabilirsiniz. Bu çeşitlilik, çubuğun görünüm ve işlevini uygulamanıza göre özelleştirmenize olanak tanır.

Progressbar2’nin temel kullanımı oldukça basittir. 

import time
import progressbar

for i in progressbar.progressbar(range(1000)):
    time.sleep(0.02)

Çıktı; tamamlanma yüzdesini, tamamlanan/toplam yineleme sayısını, geçen süreyi ve tahmini kalan süreyi gösterir.

İlerleme çubuğu kütüphaneleri tipik olarak terminalde satır başı dönüşü (\r) kullanarak tek bir satırı güncellemeye dayanır. Bu, normal print() ifadelerinin çubuğu aşağı iterek veya çıktısını bozarak müdahale edebileceği anlamına gelir. progressbar2 kütüphanesi, ilerleme çubuğunu etkilemeden güvenli bir şekilde mesaj yazdırmanın bir yolunu sağlar.

import time
import progressbar

bar = progressbar.ProgressBar(redirect_stdout=True)
for i in range(10):
    # Do some task
    time.sleep(0.1)

    # Print statement
    print(f'Loop #{i}')
    bar.update(i)

progressbar2 kütüphanesi, modüler widget sistemi aracılığıyla kapsamlı özelleştirme sunar. Widget’lar, ilerleme çubuğunda tamamlanma yüzdesi, geçen süre, tahmini kalan süre, sayaçlar veya çubuk animasyonları gibi ayrıntıları gösterir. Bu widget’ları karıştırıp eşleştirerek özel bir ilerleme çubuğu oluşturabilirsiniz. Örneğin yüzde ve ETA’yı gösterebilirsiniz. Ya da dosya adları, zaman damgaları veya döndürücüler gibi daha fazla ayrıntı ekleyebilirsiniz. 

import time
import progressbar

# Define a custom set of widgets
widgets = [
    'Progress: ',                                # Description text
    progressbar.Percentage(),         # Show percentage completed
    ' ',                              
    progressbar.Bar(marker=':'),      # Custom bar with specified marker
    ' ',
    progressbar.ETA(),                    # Estimated time remaining
    ' | ',
    progressbar.Timer(),                  # Time elapsed
]

# Initialize the progress bar with widgets
bar = progressbar.ProgressBar(widgets=widgets, max_value=50)

# Task
for i in range(50):
    # Do stuff
    time.sleep(0.1)  # Simulate task
    
    bar.update(i + 1)

Alive-progress: Modern terminaller için dinamik animasyonlar

Alive-progress, gerçek zamanlı değişen animasyonlu ilerleme çubukları gösterir. Bu, komut satırı uygulamalarına modern ve duyarlı bir görünüm kazandırır. Çubuk ileri doğru hareket eder ve yararlı gerçek zamanlı metrikler gösterir. Tamamlanma yüzdesi, geçen süre, tahmini kalan süre ve yineleme hızı görüntülenir. Bu da onu hem çekici hem bilgilendirici kılar.

alive-progress kütüphanesini kurmak için pip ile yükleyin.

pip install alive-progress

GitHub sayfasında gösterildiği gibi, yeteneklerinin bir demosunu görmek için aşağıdaki kodu kullanın.

from alive_progress.styles import showtime

showtime()

Aşağıdakine benzer bir çıktı göreceksiniz.

Alive-progress aynı anda birden çok ilerleme çubuğunu görüntüleme ve yönetme yeteneğine sahiptir.

from alive_progress import alive_bar
import time
import threading

# Simulate a task
def simulate_task(name, total):
    with alive_bar(total, title=name) as bar:
        for _ in range(total):
            # Do something
            time.sleep(0.5)

            bar()

# Define threads
threads = [
    threading.Thread(target=simulate_task, args=('Task A', 50)),
    threading.Thread(target=simulate_task, args=('Task B', 70)),
    threading.Thread(target=simulate_task, args=('Task C', 40)),
]

# Start each thread
for t in threads:
    t.start()

# Block the main thread until the program is finished
for t in threads:
    t.join()

alive-progress kütüphanesi, birkaç yerleşik temayla birlikte gelir. Temalar; animasyon stilini, çubuğu doldurmak için kullanılan karakterleri ve genel hareket etkisini kontrol eder. Yaygın temalara classic, pulse ve brackets örnek verilebilir.

import time
from alive_progress import alive_bar

with alive_bar(100, bar='blocks') as bar:
    for _ in range(100):
        # Do something
        time.sleep(0.02)
        
        bar()

Duraklatma/sürdürme – durumu kaybetmeden geçici olarak ilerlemeyi durdurup sürdürme

from alive_progress import alive_bar
import time

# Run a task...
with alive_bar(100) as bar:
    for i in range(50):
        # Do something
        time.sleep(0.02)

        bar()
    
    # Pause
    bar.text('Temporarily pausing...')
    time.sleep(1)

    # Resume
    bar.text('Resuming...')
    for i in range(50):
        time.sleep(0.02)
        bar()

Tkinter ile GUI İlerleme Çubukları

Tkinter, Python’un standart GUI (Grafik Kullanıcı Arayüzü) araç takımıdır. Tasarımında yerleşik özellikler bulunur ve kullanıma hazırdır; ek bir şey kurmanıza gerek yoktur. Pencereler, düğmeler, metin alanları, menüler, ilerleme çubukları ve daha fazlasını oluşturabilirsiniz. Tkinter, basit masaüstü uygulamaları, etkileşimli araçlar ve prototipler oluşturmak için idealdir. 

Temel bir ilerleme çubuğu aşağıdaki kodla oluşturulabilir. 

import tkinter as tk
from tkinter import ttk
import time

def start_progress():
    progress["value"] = 0
    root.update_idletasks()
    for i in range(101):
        time.sleep(0.02)
        progress["value"] = i
        root.update_idletasks()

# Set up the window
root = tk.Tk()
root.title("Progress Bar")
root.geometry("300x100")

# Create a progress bar
progress = ttk.Progressbar(root, orient="horizontal", length=250, mode="determinate")
progress.pack(pady=20)

# Create a start button
start_button = ttk.Button(root, text="Start", command=start_progress)
start_button.pack()

# Start the tkinter loop
root.mainloop()

Mac’imde çıktı:

ttk.Progressbar ile iki kip mevcuttur: belirli (determinate) ve belirsiz (indeterminate). Belirli kip, bir görevin süresi veya adım sayısı bilindiğinde kullanılır. Belirsiz kip, görevin süresi bilinmediğinde veya adımlarla ölçülemediğinde kullanılır.

Yukarıdaki kod belirli kip içindir; çünkü görevin uzunluğunun 250 adım olduğunu biliyorduk. Aşağıda belirsiz kip için bir örnek yer alır.

import tkinter as tk
from tkinter import ttk
import time
import threading

def start_indeterminate():
    def run():
        # 10 ms between moves
        progress.start(10)

        # Simulate task of unknown duration
        time.sleep(10)

        # Stop
        progress.stop()
    
    # Run in a thread, else the tkinter GUI loop is unresponsive
    threading.Thread(target=run).start()

# Set up the GUI
root = tk.Tk()
root.title("Indeterminate Progress Bar")
root.geometry("300x100")

# Create an indeterminate progress bar
progress = ttk.Progressbar(root, mode='indeterminate', length=250)
progress.pack(pady=20)

# Start button
start_button = ttk.Button(root, text="Start", command=start_indeterminate)
start_button.pack()

# Run the tkinter loop
root.mainloop()

İlerleme çubuğunun ayrı bir iş parçacığında çalıştırıldığına dikkat edin. run()’ı doğrudan ana iş parçacığında kullansaydık, time.sleep() çağrısı ana Tkinter olay döngüsünü bloke eder ve düğme tıklamaları, pencere yeniden çizimleri ve ilerleme çubuğu animasyonu dahil tüm GUI’nin donmasına neden olurdu.

Performans Değerlendirmeleri ve Optimizasyon

İlerleme çubuğu için hangi kütüphaneyi kullanmalısınız? Kararın bir kısmı ek yük gereksinimlerinize ve kullanım senaryonuza bağlıdır.

Kütüphane

Ek yük

Kullanım Senaryosu

tqdm

Çok düşük

Hızlı döngüler, veri boru hatları, performansa minimum etki

progress

Düşük

Basit CLI betikleri, hafif ve bağımlılıksız

progressbar2

Orta

Özel yerleşimler, ETA ve günlükleme; hızlı görevlerde hafif yavaşlama

alive-progress

Orta ila yüksek

Görsel açıdan zengin görevler, çoklu çubuk çıktısı, akıcı animasyonlar; uzun görevler için en iyisi

Performansı artırmak için güncelleme sıklığını optimize edin. Bir yöntem, çubuğu her yinelemede güncellememektir. Bu, özellikle hızlı veya yüksek frekanslı döngülerde önemlidir. Koşullu mantık kullanarak her N adımda, örneğin her 100 yinelemede bir güncelleyin.

Kritik performans ortamlarında veya üretim kodunda ilerleme çubuklarını devre dışı bırakın. Görsel geri bildirim burada gerekli değildir. Bu, kaynak tasarrufu sağlar ve geliştirme veya hata ayıklama için mantığın aynı kalmasını temin eder. 

G/Ç (I/O) işlemlerini azaltmak performans için kritiktir. Terminale, diske veya ağa yazmak yavaşlatabilir. Performansın kritik olduğu görevlerde G/Ç’yi azaltmak için bazı stratejiler şunlardır.

  • Çıktıyı arabelleğe alın ve yineleme başına değil, toplu yazın.
  • Yalnızca sabit aralıklarla ya da belirtilen koşullar altında güncelleyin.
  • Döngüler içinde print() kullanımını en aza indirin veya devre dışı bırakın.
  • Üretimde gereksiz çıktıları bastırmak için bayraklar ekleyin.
  • G/Ç ve hesaplamayı iş parçacıkları veya çoklu işlem ile ayırın.
  • Disk G/Ç sıklığını azaltmak için büyük yazmaları sıkıştırın veya toplulaştırın.

Etkili İlerleme Çubukları için En İyi Uygulamalar

Python’da ilerleme çubukları oluştururken akılda tutulması gereken bazı en iyi uygulamalara bakalım. 

Neden ilerleme çubukları kullanılır?

Uygulamalarınızda ilerleme çubukları kullanmak için pek çok iyi neden vardır. Öncelikle, gerçek zamanlı geri bildirim sağlayarak görevlerin ilerlediğine dair güvence verir ve belirsizliği azaltırlar. Bu görünürlük, kullanıcı deneyimini iyileştirir; bekleme sürelerini daha kısa hissettirir ve etkileşimleri daha sezgisel kılar. 

İkinci olarak, görev tamamlanmasını görsel olarak takip ederek, ilerleme çubukları kolay performans izlemesi sağlar; uzun süreli işlemler sırasında kullanıcıların ve geliştiricilerin darboğazları veya takılan süreçleri hızla fark etmesine imkân tanır. Son olarak, ilerleme çubuklarını dahil etmek, uygulamanızın arayüzünün profesyonellik seviyesini yükseltir; netlik ve düşünülmüş, kullanıcı merkezli bir tasarım yaklaşımı yansıtır.

Süresi bilinen vs. bilinmeyen görevler

Süresi belirli olan görevler için belirli bir ilerleme çubuğu kullanın. Buna dosya işleme, döngüler veya makine öğrenimi eğitim dönemleri (epoch) dahildir. Bu tür çubuk, ölçülebilir ilerlemeye göre dolar ve kullanıcılara kalan iş hakkında net bir fikir verir.

Süresi bilinmeyen görevler için, örneğin API çağrıları veya arka plan kontrolleri, bir döndürücü veya belirsiz bir çubuk kullanın. Bunlar, ne kadar süreceğini öngöremesek de, sürecin devam ettiğine dair görsel bir ipucu sunar.

Hangi kütüphaneyi kullanmalıyım?

Kullanacağınız kütüphane, gerçekleştirmeye çalıştığınız görevlere bağlıdır.

Görev 

Kütüphane

Notlar

Yüksek frekanslı döngüler

tqdm

Hafif, verimli; güncellemeleri azaltmak için mininterval kullanın

Basit, tek seferlik betikler

progress

Minimum kurulum, bağımlılık yok, hızlı görevler için ideal

Yapılandırılmış veya özel çıktı

progressbar2

Widget tabanlı, ETA, zamanlayıcılar ve yerleşim kontrolünü destekler

Çok aşamalı veya iç içe görevler

tqdm, alive-progress

Katmanlı görevler için iç içe çubukları veya çoklu çubuk görünümlerini destekler

Görsel açıdan özenli CLI betikleri

alive-progress

Animasyonlu ve modern görseller, akıcı kullanıcı deneyimi

GUI uygulamaları

tkinter

Belirli ve belirsiz çubukları olan yerleşik GUI araç takımı

Özelleştirme

İlerleme çubuklarını özelleştirirken netliğe ve faydalı bilgilere odaklanın. İkisi arasında iyi bir denge kurmaya çalışın. Anahtar metriklere sahip net ve basit bir çubuk, genellikle fazla bilgiyle dolu bir çubuktan daha iyidir. 

progressbar2 ve alive-progress gibi kütüphaneleri kullanabilirsiniz. Bunlar ilerleme çubuklarınızın yerleşimini, rengini ve animasyonunu değiştirmenize olanak tanır. Temalar veya biçimlendirme kullanarak kullanıcı deneyimini iyileştirin. Görünümü çok fazla widget ya da karmaşık görsellerle kalabalıklaştırmaktan kaçının. Amaç, kullanıcıyı oyalamadan veya bunaltmadan faydalı geri bildirim sağlamaktır.

Hata yönetimi ve uyumluluk testi

İlerleme çubuğu mantığını try-except bloklarına alın. Bu, bir hata oluştuğunda UI aksaklıklarını veya çökmeleri önlemeye yardımcı olur. Bu, uzun süre çalışan betiklerde veya belirsiz harici bağımlılıkların kullanıldığı durumlarda kritiktir.

Ayrıca ilerleme çubuklarınızı farklı ortamlarda test edin. Çeşitli işletim sistemleri, terminal türleri ve ekran genişlikleri arasında kontrol edin. Böylece davranışlarının tutarlı kalmasını sağlayabilirsiniz.

Bazı kütüphaneler Jupyter notebook’larında, uzaktan terminallerde veya GUI kabuklarında farklı davranır. Uyumluluğu erken doğrulamak, beklenmedik sorunları önlemeye yardımcı olabilir. Böylece kullanıcılar üretimde daha sorunsuz bir deneyim yaşar.

Erişilebilirlik değerlendirmeleri

İlerleme göstergeleri oluştururken erişilebilirliği dikkate alın. Bu, tüm kullanıcıların net geri bildirim almasına yardımcı olur. Bazı öneriler:

  • İlerlemeyi göstermek için yalnızca renge veya animasyona güvenmeyin. Yüzde, adım sayısı veya zaman tahminleri gibi metin öğeleri ekleyin.
  • Daha iyi okunabilirlik için net, yüksek kontrastlı görseller kullanın.
  • GUI uygulamalarında ilerleme çubuklarınızın ekran okuyucularla iyi çalıştığından emin olun.
  • Komut satırı araçları için ilerleme güncellemelerini düz metin olarak yazdıran ayrıntı düzeyi (verbosity) seçeneklerini düşünün.

Erişilebilirliği önceliklendirmek, kullanılabilirliği artırır. Ayrıca araçlarınızı daha kapsayıcı ve profesyonel kılar.

Sonuç 

İlerleme çubukları, herhangi bir Python uygulaması için basit ama güçlü bir özelliktir. Anında geri bildirim sağlar, kullanıcı deneyimini iyileştirir ve performans ile kod netliğini takip eder. Doğru ilerleme çubuğu kütüphanesini seçmek kritik önemdedir. İster hızlı bir betik, ister bir komut satırı aracı, ister tam bir GUI uygulaması geliştiriyor olun, yazılımınızı iyileştirebilir. Düşünceli bir uygulama, yazılımınızın hızını, profesyonelliğini ve kullanıcı dostluğunu artırabilir. Özelleştirme, performans, uyumluluk ve erişilebilirliği önceliklendirmek, ilerleme çubuklarını salt görsellerin ötesine taşır. Kullanıcıların çalışmanızla etkileşiminin önemli bir parçası haline gelirler.

Öğrenmeye devam etmek için şu kaynaklara göz atın:

Python İlerleme Çubuğu SSS

İlerleme çubuğu nedir?

İlerleme çubuğu, bir görevin ne kadarının tamamlandığını ve ne kadarının kaldığını gösteren görsel bir göstergedir. Uzun işlemler sırasında geri bildirim sağlayarak kullanıcı deneyimini iyileştirir.

Python’daki popüler ilerleme çubuğu kütüphaneleri hangileridir?

En yaygın kütüphaneler tqdm, progress, progressbar2 ve alive-progress’tır.

pandas kütüphanesiyle ilerleme çubuklarını kullanabilir miyim?

Evet. tqdm, pandas ile progress_apply() ( apply yerine) ve benzeri yöntemler aracılığıyla bütünleşir.

İlerleme çubuğunun görünümünü özelleştirebilir miyim?

Evet. tqdm ve progressbar2 gibi kütüphaneler yerleşim, genişlik, renk ve güncelleme sıklığını özelleştirmenize imkân tanır.

Jupyter Notebook’lar için hangi kütüphaneyi kullanmalıyım?

tqdm.notebook kütüphanesi Jupyter ile iyi bütünleşir.

Mark Pedigo

Yazar

Mark Pedigo

Mark Pedigo, PhD, sağlık verisi bilimi, programlama ve eğitim alanlarında uzmanlığa sahip seçkin bir veri bilimcisidir. Matematikte doktora, Bilgisayar Biliminde lisans ve Yapay Zekâ alanında Profesyonel Sertifika sahibi olan Mark, teknik bilgisini pratik problem çözme becerileriyle birleştirir. Kariyeri, dolandırıcılık tespiti, bebek ölümü tahmini ve finansal öngörü gibi rollerin yanı sıra NASA’nın maliyet tahmin yazılımına katkıları içerir. Bir eğitimci olarak DataCamp ve St. Louis’teki Washington University’de ders vermiş ve kıdemsiz programcılara mentorluk yapmıştır. Boş zamanlarında Mark, eşi Mandy ve köpeği Harley ile Minnesota’nın doğasında vakit geçirmeyi ve caz piyano çalmayı sever.

Konular

İlgili