मुख्य सामग्री पर जाएं
Python

Python में प्रोग्रेस बार: उदाहरणों सहित संपूर्ण गाइड

tqdm, progressbar2, alive-progress, और Tkinter का उपयोग कर Python प्रोग्रेस बार बनाना सीखें, बेहतर UX और ऐप परफॉर्मेंस के लिए श्रेष्ठ प्रथाओं सहित।
Mark Pedigo's photo
Mark Pedigo
अपडेट किया गया · 13 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।

आज के ऐप्स में उपयोगकर्ता त्वरित फीडबैक चाहते हैं, खासकर जब कार्य पूरे होने में समय लगता है। Python प्रोग्रेस बार यह दिखाने का एक स्पष्ट और आसान तरीका है कि पृष्ठभूमि में कुछ चल रहा है। एक मज़बूत प्रोग्रेस बार प्रोग्राम को तेज़ महसूस कराता है, प्रोफेशनल टच जोड़ता है, और उपयोगिता बढ़ाता है। 

इस लेख में, आप लोकप्रिय लाइब्रेरी जैसे tqdm, progress, progressbar2, alive-progress, और Tkinter के साथ Python प्रोग्रेस बार लागू करना सीखेंगे, साथ ही उपयोगकर्ता अनुभव और एप्लिकेशन परफॉर्मेंस बेहतर करने की श्रेष्ठ प्रथाएँ भी जानेंगे।

Python की संकल्पनाएँ एक्सप्लोर करने के लिए, हमारा Python Programming Fundamentals स्किल ट्रैक देखें। 

संक्षेप में

  • कमांड-लाइन टूल्स के लिए tqdm सबसे बेहतर विकल्प है — यह हल्का है और pandas के साथ अच्छा काम करता है। साधारण स्क्रिप्ट्स के लिए progress लें, कस्टम लेआउट के लिए progressbar2, या एनिमेटेड विज़ुअल्स के लिए alive-progress।

  • डेस्कटॉप ऐप्स के लिए, Tkinter का बिल्ट-इन ttk.Progressbar ज्ञात-अवधि (determinate) और खुली-अवधि (indeterminate) दोनों प्रकार के कार्य संभालता है।

  • तेज़ लूप्स में अपडेट्स को थ्रॉटल रखें ताकि गति कम न हो, और विज़ुअल्स के साथ प्रतिशत या काउंट जैसी टेक्स्ट जानकारी दें ताकि बार सभी के लिए उपयोगी रहे।

Python में प्रोग्रेस बार क्या हैं?

प्रोग्रेस बार सर्वव्यापी हैं। इन्हें अक्सर फ़ाइल डाउनलोड, सॉफ़्टवेयर इंस्टॉलेशन, और ETL पाइपलाइंस में उपयोग किया जाता है। मशीन लर्निंग मॉडल ट्रेनिंग की प्रगति ट्रैक करने के लिए भी ये उपयोगी हैं।

प्रोग्रेस बार दिखाता है कि कार्य का कितना भाग पूरा हो गया है और कितना बाकी है। यह कमांड-लाइन इंटरफ़ेस (CLI) में टेक्स्ट के रूप में या ग्राफ़िकल यूज़र इंटरफ़ेस (GUI) में विज़ुअल बार के रूप में दिख सकता है।

प्रोग्रेस बार उपयोगकर्ता अनुभव सुधारते हैं। ये रियल-टाइम अपडेट देते हैं, जिससे उपयोगकर्ता प्रक्रिया में अपनी प्रगति देख पाते हैं। यदि देरी होती है तो उपयोगकर्ता तय कर सकते हैं कि हस्तक्षेप करना है या इंतज़ार। यह दृश्यता झुंझलाहट घटाती है और प्रतीक्षा समय को छोटा महसूस कराती है। उपयोगकर्ता स्थिर स्क्रीन को घूरते नहीं रहेंगे; वे जुड़े रहते हैं और आश्वस्त महसूस करते हैं कि प्रगति हो रही है।

डेवलपर्स एप्लिकेशन परफॉर्मेंस ट्रैक करने के लिए प्रोग्रेस बार का उपयोग करते हैं। ये बॉटलनेक्स पहचानने, कोड बेंचमार्क करने, और कार्य की अवधि ट्रैक करने में मदद करते हैं। स्क्रिप्ट्स और वर्कफ़्लोज़ में प्रोग्रेस बार स्पष्ट स्टेटस अपडेट दिखाते हैं। ये उपयोगकर्ताओं को लंबे समय तक चलने वाली प्रक्रियाओं को बेहतर समझने में मदद करते हैं। ये इंटरैक्टिव टूल्स और नोटबुक्स की उपयोगिता भी बढ़ाते हैं।

प्रोग्रेस बार एक सरल परफॉर्मेंस मॉनिटरिंग टूल के रूप में भी काम कर सकते हैं। ये दिखाते हैं कि प्रत्येक कार्य में कितना समय लगा। इससे डेवलपर्स धीमे चरणों को पहचानते हैं और दक्षता मापते हैं। यह अलग-अलग इम्प्लीमेंटेशन्स की तुलना आसान बनाता है। 

कमांड-लाइन प्रोग्रेस बार

कमांड-लाइन प्रोग्रेस बार सीधे टर्मिनल में लंबे कार्यों के लिए विज़ुअल फीडबैक देते हैं, जिससे स्क्रिप्ट्स अधिक जानकारीपूर्ण और यूज़र-फ्रेंडली बनती हैं। Python कई लाइब्रेरी देता है, जिनकी ताकतें स्पीड, कस्टमाइज़ेशन और विज़ुअल स्टाइल में हैं। हम चार पर नज़र डालेंगे: tqdm, progress, progressbar2, और alive-progress। 

Tqdm: गति और सरलता का मानक

tqdm Python में प्रोग्रेस बार बनाने के लिए लोकप्रिय लाइब्रेरी है। यह लूप्स और इटेरेबल्स के लिए तेज़ और बहुमुखी प्रोग्रेस इंडिकेटर्स देता है। यह इटरेशन ट्रैक करता है और शेष तथा बीते समय की गणना करता है। यह जानकारी रियल-टाइम में बार को अपडेट करती है। tqdm पृष्ठभूमि में काम करता है। यह बचे समय का अनुमान लगाता है और अनावश्यक अपडेट को छोड़ देता है। इसे सीखना सरल है, मेमोरी में हल्का है, और मज़बूत समुदाय द्वारा समर्थित है। 

इंस्टॉलेशन प्रक्रिया

tqdm इंस्टॉल करने का आसान तरीका pip इंस्टॉलर का उपयोग करना है। टर्मिनल से निम्न कमांड चलाएँ।

pip install tqdm

लाइब्रेरी सही तरह से इंस्टॉल हुई है, यह सुनिश्चित करने के लिए वर्ज़न नंबर प्रिंट करें।

import tqdm
print(tqdm.__version__)

4.67.1

tqdm का बुनियादी उपयोग

tqdm उपयोग में सरल है। लाइब्रेरी इम्पोर्ट करें। कोई भी इटेरेबल tqdm(iterable) से रैप करें ताकि प्रोग्रेस बार दिखे।

tqdm(range(n)) लिखने के बजाय, सुविधा के लिए आप trange(n) का शॉर्टहैंड इस्तेमाल कर सकते हैं।

from tqdm import trange
import time

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

यह कोड निष्पादन के दौरान लाइव प्रोग्रेस बार बनाता है।

प्रोग्रेस बार दिखाता है

  • पूरा हुआ प्रतिशत (22%)
  • कुल में से पूर्ण इटरेशंस की संख्या (224/1000)
  • बीता समय और अनुमानित शेष समय (12 सेकंड बीते, 42 सेकंड शेष)
  • प्रति सेकंड इटरेशंस (18.09 it/s)।

प्रोग्रेस बार में विवरण जोड़ने के लिए desc विकल्प निर्दिष्ट करें।

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

नेस्टेड प्रोग्रेस बार 

tqdm में नेस्टेड प्रोग्रेस बार एक से अधिक लूप्स में प्रगति ट्रैक करने में मदद करते हैं। ये तब भी उपयोगी हैं जब आपको कई कार्य चरणों को ट्रैक करना हो। उदाहरण: बैच प्रोसेसिंग, नेस्टेड लूप्स, और मॉडल ट्रेनिंग। 

हर लूप को tqdm के साथ रैप करें। उनकी उपस्थिति नियंत्रित करने के लिए position और leave आर्गुमेंट्स का उपयोग करें।

  • position: प्रत्येक प्रोग्रेस बार की वर्टिकल पोज़िशन सेट करता है। position=0 सबसे ऊपर, position=1 उसके नीचे, इत्यादि।
  • leave: leave=True होने पर कार्य पूरा होने के बाद भी बार स्क्रीन पर रहता है। leave=False पर यह हट जाता है ताकि अव्यवस्था न हो।
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)

नेस्टेड प्रोग्रेस बार स्पष्ट पदानुक्रम दिखाते हैं। ये कार्य के अलग-अलग चरणों को विज़ुअलाइज़ करने में मदद करते हैं। ये विभिन्न स्तरों पर विस्तृत जानकारी देते हैं। इससे डेवलपर्स आसानी से धीमापन या बॉटलनेक पहचान सकते हैं।

Pandas इंटीग्रेशन

Tqdm pandas के साथ अच्छी तरह इंटीग्रेट होता है। यह DataFrame और Series कार्यों में प्रोग्रेस बार जोड़ने का सरल तरीका देता है। यह apply, groupby, और map जैसी फंक्शंस के लिए रियल-टाइम प्रोग्रेस दिखाता है। बड़े डेटासेट पर ये फंक्शंस धीमे हो सकते हैं।

इस फीचर को सक्षम करने के लिए tqdm.pandas() कॉल करें। फिर pandas की सामान्य apply विधि के बजाय progress_apply का उपयोग करें। यह आपकी फ़ंक्शन के पंक्तियों या कॉलम्स पर चलते समय प्रोग्रेस बार दिखाएगा। बिना कोड फिर से लिखे आप ऑपरेशन की प्रगति देखेंगे।

निम्न कार्यक्रम में, हम "numbers" नामक कॉलम के साथ एक DataFrame बनाते हैं। यह कॉलम 0 से 1000 तक के पूर्णांक रखता है। फिर हम slow_squared नामक एक "धीमे" ऑपरेशन को लागू कर नया कॉलम बनाते हैं। 

मानक pandas apply के स्थान पर, हम tqdm का progress_apply उपयोग करते हैं। ऑपरेशन के दौरान एक प्रोग्रेस बार दिखता है। यह बताता है कि प्रोसेसिंग कितनी हो चुकी है।

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())

कोड का आउटपुट निम्नानुसार है।

हम groupby जैसे अन्य DataFrame ऑपरेशंस के लिए भी progress_apply का उपयोग कर सकते हैं।

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

कस्टमाइज़ेशन विकल्प

Tqdm आपको प्रोग्रेस बार को विभिन्न परिवेशों और यूज़र की ज़रूरतों के अनुसार कस्टमाइज़ करने देता है। आप ncols से चौड़ाई समायोजित कर सकते हैं। bar_format आर्गुमेंट से आप टेक्स्ट लेआउट पर पूरा नियंत्रण पा सकते हैं। साथ ही dynamic_ncols=True सेट करने पर बार टर्मिनल के अनुरूप स्वतः रिसाइज़ होता है।

tqdm के लिए परफॉर्मेंस संबंधी विचार

Tqdm तेज़ और हल्का है। यह तेज़ लूप्स में भी बहुत कम ओवरहेड जोड़ता है। आप disable=True से प्रोग्रेस बार अक्षम कर सकते हैं। यह प्रोडक्शन सेटिंग्स में सहायक है जहां परफॉर्मेंस अहम है। तेज़ लूप्स में हर बार अपडेट करना भारी पड़ सकता है, इसलिए tqdm आपको अपडेट की आवृत्ति नियंत्रित करने देता है। आप mininterval और maxinterval जैसे पैरामीटर्स का उपयोग कर सकते हैं। 

Progress: कस्टमाइज़ेबल स्टाइल्स और स्पिनर्स

Python में Progress लाइब्रेरी कमांड लाइन के लिए सरल टेक्स्ट-आधारित प्रोग्रेस बार बनाने देती है। इसका API सीधा-सादा है। यह प्रोग्रेस बार और स्पिनर दोनों सपोर्ट करता है और बेसिक आउटपुट कस्टमाइज़ेशन देता है। यह छोटा, तेज़ है और कोई डिपेंडेंसी नहीं है। इसलिए यह त्वरित स्क्रिप्ट्स और साधारण सेटअप्स के लिए बढ़िया है। 

progress लाइब्रेरी में सात बिल्ट-इन प्रोग्रेस बार स्टाइल्स हैं: Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, और Shadybar. 

सेटअप के लिए pip install का उपयोग करें।

pip install progress

उपयोग के लिए, मनचाहा स्टाइल इम्पोर्ट करें, एक वेरिएबल बनाएं, लूप में .next() और प्रक्रिया के अंत में .finish() कॉल करें। उदाहरण के लिए, ChargingBar उपयोग करने हेतु निम्न कोड देखें।

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 में अज्ञात अवधि वाले कार्यों के लिए स्पिनर्स भी हैं। स्पिनर लागू करने का कोड सीधा है।

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()

यह कोड विवरण ("Processing…") के बाद एक स्पिनर दिखाता है।

progress लाइब्रेरी सरल और हल्की है, लेकिन कुछ सीमाएँ हैं। यह Jupyter notebooks को सपोर्ट नहीं करती और डायनैमिक रिसाइज़ नहीं कर पाती। साथ ही, इसमें tqdm जैसी लाइब्रेरी की तुलना में कम कस्टमाइज़ेशन विकल्प हैं। यह बुनियादी कमांड-लाइन कार्यों के लिए अच्छी है, पर जटिल या उच्च-प्रदर्शन कार्यों में सीमित हो सकती है।

Progressbar2: बेहतर कस्टमाइज़ेशन और संगतता

Progressbar2 एक शक्तिशाली Python लाइब्रेरी है। यह कमांड-लाइन ऐप्स के लिए लचीले और कस्टमाइज़ेबल प्रोग्रेस बार बनाने में मदद करती है। इसमें प्रतिशत, ETA, एनिमेटेड मार्कर्स और काउंटर्स जैसे कई विजेट्स हैं। यह अधिक जटिल या परिष्कृत CLI कार्यों के लिए बढ़िया बनाता है। 

Progressbar2, progress जैसी सरल लाइब्रेरी की तुलना में अधिक नियंत्रण और फॉर्मेटिंग विकल्प देता है। यह लॉगिंग और मल्टीथ्रेडेड वर्कफ़्लोज़ के साथ भी बेहतर काम करता है।

इंस्टॉल करने के लिए pip install उपयोग करें।

pip install progressbar2

progressbar2 में ProgressBar क्लास कस्टमाइज़ेबल विजेट्स के सेट के साथ मौजूदा प्रोग्रेस स्थिति दिखाता है। 

एक विजेट प्रोग्रेस बार की स्थिति के आधार पर अपडेट होने वाला मॉड्यूलर भाग है। इसमें पूरा हुआ प्रतिशत, बीता समय, और अनुमानित शेष समय शामिल हैं। 

आप कई प्रकार के विजेट्स चुन सकते हैं। इनमें टेक्स्ट लेबल्स, प्रोग्रेस मार्कर्स, काउंटर्स, टाइमर्स, स्पिनर्स, और कस्टम फॉर्मैटर्स शामिल हैं। यह विविधता आपको अपने ऐप के लिए बार के रूप और कार्य को कस्टमाइज़ करने देती है।

Progressbar2 का बुनियादी उपयोग काफी सरल है। 

import time
import progressbar

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

आउटपुट में पूर्ण प्रतिशत, पूर्ण/कुल इटरेशंस, बीता समय, और अनुमानित शेष समय दिखता है।

प्रोग्रेस बार लाइब्रेरीज़ आमतौर पर कैरिज रिटर्न (\r) से टर्मिनल में एक ही पंक्ति अपडेट करती हैं। इसका मतलब है कि सामान्य print() स्टेटमेंट्स बार को नीचे धकेल सकते हैं या आउटपुट बिगाड़ सकते हैं। progressbar2 ऐसी विधि देता है जिससे आप प्रोग्रेस बार में बाधा डाले बिना सुरक्षित रूप से मैसेज प्रिंट कर सकें।

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 अपनी मॉड्यूलर विजेट प्रणाली के माध्यम से व्यापक कस्टमाइज़ेशन प्रदान करता है। विजेट्स प्रोग्रेस बार में विवरण दिखाते हैं, जैसे पूरा हुआ प्रतिशत, बीता समय, अनुमानित शेष समय, काउंटर्स, या बार एनीमेशन। आप इन विजेट्स को मिलाकर कस्टम प्रोग्रेस बार बना सकते हैं। उदाहरण के लिए, आप प्रतिशत और ETA दिखा सकते हैं। या फ़ाइल नाम, टाइमस्टैम्प, या स्पिनर्स जैसे और विवरण जोड़ सकते हैं। 

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: आधुनिक टर्मिनलों के लिए डायनैमिक एनीमेशन

Alive-progress रियल-टाइम में बदलने वाले एनिमेटेड प्रोग्रेस बार दिखाता है। इससे कमांड-लाइन ऐप्स को आधुनिक और रेस्पॉन्सिव लुक मिलता है। बार आगे बढ़ता है और मददगार रियल-टाइम मेट्रिक्स दिखाता है। यह पूर्ण प्रतिशत, बीता समय, अनुमानित शेष समय, और इटरेशन स्पीड दिखाता है। इससे यह आकर्षक और जानकारीपूर्ण, दोनों बनता है।

इंस्टॉल करने के लिए alive-progress लाइब्रेरी को pip से इंस्टॉल करें।

pip install alive-progress

इसके GitHub पेज पर दिखाए अनुसार, इसकी क्षमताओं का डेमो देखने के लिए निम्न कोड उपयोग करें।

from alive_progress.styles import showtime

showtime()

आपको निम्न जैसा आउटपुट दिखेगा।

Alive-progress एक साथ कई प्रोग्रेस बार दिखाने और प्रबंधित करने की क्षमता रखता है।

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 लाइब्रेरी में कई बिल्ट-इन थीम्स शामिल हैं। थीम्स एनीमेशन स्टाइल, बार भरने वाले कैरेक्टर्स, और ओवरऑल मूवमेंट इफ़ेक्ट जैसे तत्व नियंत्रित करती हैं। आम थीम्स में classic, pulse, और brackets शामिल हैं।

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()

रोकें/फिर शुरू करें — स्थिति खोए बिना अस्थायी रूप से प्रोग्रेस रोकें और फिर शुरू करें

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 के साथ GUI प्रोग्रेस बार

Tkinter Python का मानक GUI (ग्राफ़िकल यूज़र इंटरफ़ेस) टूलकिट है। इसका डिज़ाइन बिल्ट-इन फीचर्स के साथ तैयार आता है, इसलिए आपको कुछ अतिरिक्त इंस्टॉल करने की ज़रूरत नहीं। आप विंडो, बटन्स, टेक्स्ट फ़ील्ड्स, मेन्यू, प्रोग्रेस बार इत्यादि बना सकते हैं। Tkinter सरल डेस्कटॉप एप्लिकेशन, इंटरैक्टिव टूल्स, और प्रोटोटाइप बनाने के लिए आदर्श है। 

एक बुनियादी प्रोग्रेस बार निम्न कोड से बनाया जा सकता है। 

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 पर आउटपुट:

ttk.Progressbar में दो मोड उपलब्ध हैं: determinate और indeterminate। Determinate मोड तब उपयोग होता है जब कार्य की अवधि या चरणों की संख्या ज्ञात हो। Indeterminate मोड तब उपयोग होता है जब कार्य की अवधि अज्ञात हो या चरणों में मापना सम्भव न हो।

ऊपर का कोड determinate मोड के लिए है, क्योंकि हमें पता था कि कार्य की लंबाई 250 स्टेप्स है। Indeterminate मोड का एक उदाहरण नीचे है।

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()

ध्यान दें कि प्रोग्रेस बार अलग थ्रेड में चलाया गया। यदि हम run() को मुख्य थ्रेड में सीधे चलाते, तो time.sleep() मुख्य Tkinter इवेंट लूप को ब्लॉक कर देता और पूरी GUI फ्रीज़ हो जाती — बटन क्लिक, विंडो रीड्रॉ, और प्रोग्रेस बार एनीमेशन सहित।

परफॉर्मेंस संबंधी विचार और ऑप्टिमाइज़ेशन

अपनी प्रोग्रेस बार के लिए आपको कौन-सी लाइब्रेरी उपयोग करनी चाहिए? इसका एक हिस्सा आपके ओवरहेड आवश्यकताओं और उपयोग-प्रसंग पर निर्भर करता है।

लाइब्रेरी

ओवरहेड

उपयोग-प्रसंग

tqdm

बहुत कम

तेज़ लूप्स, डेटा पाइपलाइंस, परफॉर्मेंस पर न्यूनतम प्रभाव

progress

कम

सरल CLI स्क्रिप्ट्स, हल्का और बिना डिपेंडेंसी

progressbar2

मध्यम

कस्टम लेआउट, ETA और लॉगिंग; तेज़ कार्यों में थोड़ा धीमापन

alive-progress

मध्यम से अधिक

विज़ुअली समृद्ध कार्य, मल्टी-बार आउटपुट, स्मूथ एनीमेशन; लंबे कार्यों के लिए श्रेष्ठ

परफॉर्मेंस बढ़ाने के लिए, अपडेट आवृत्ति को ऑप्टिमाइज़ करें। एक तरीका यह है कि हर इटरेशन पर बार अपडेट न करें। यह खासकर तेज़ या उच्च-आवृत्ति लूप्स में महत्वपूर्ण है। उदाहरण के लिए, हर 100 इटरेशन पर कंडीशनल लॉजिक से अपडेट करें।

क्रिटिकल परफॉर्मेंस सेटिंग्स या प्रोडक्शन कोड में, प्रोग्रेस बार अक्षम करें। यहां विज़ुअल फीडबैक आवश्यक नहीं है। इससे संसाधन बचते हैं जबकि विकास या डीबगिंग के लिए लॉजिक वही रहता है। 

I/O ऑपरेशंस में कटौती परफॉर्मेंस के लिए अहम है। टर्मिनल, डिस्क, या नेटवर्क पर लिखना धीमा कर सकता है। परफॉर्मेंस-क्रिटिकल कार्यों में I/O घटाने की कुछ रणनीतियाँ:

  • आउटपुट बफर करें और प्रति इटरेशन की बजाय बैच में लिखें।
  • केवल निश्चित अंतराल पर या निर्दिष्ट शर्तों पर ही अपडेट करें।
  • लूप्स के अंदर print() को न्यूनतम रखें या अक्षम करें।
  • प्रोडक्शन में अनावश्यक आउटपुट दबाने के लिए फ्लैग्स जोड़ें।
  • थ्रेड्स या मल्टीप्रोसेसिंग से I/O और कंप्यूटेशन को अलग करें।
  • डिस्क I/O की आवृत्ति घटाने के लिए बड़े लिखने को कंप्रेस करें या बैच में करें।

प्रभावी प्रोग्रेस बार के लिए श्रेष्ठ प्रथाएँ

आइए Python में प्रोग्रेस बार बनाते समय ध्यान रखने योग्य कुछ श्रेष्ठ प्रथाएँ देखें। 

प्रोग्रेस बार क्यों उपयोग करें?

अपनी एप्लिकेशन में प्रोग्रेस बार उपयोग करने के कई अच्छे कारण हैं। पहला, वे रियल-टाइम फीडबैक देते हैं, उपयोगकर्ताओं को भरोसा दिलाते हैं कि कार्य आगे बढ़ रहे हैं और अनिश्चितता घटाते हैं। यह दृश्यता उपयोगकर्ता अनुभव को बेहतर बनाती है, प्रतीक्षा समय को छोटा महसूस कराती है और इंटरैक्शन को अधिक सहज बनाती है। 

दूसरा, कार्य पूर्णता को विज़ुअली ट्रैक करके, प्रोग्रेस बार आसान परफॉर्मेंस मॉनिटरिंग सक्षम करते हैं, जिससे उपयोगकर्ता और डेवलपर दोनों लंबे ऑपरेशंस के दौरान बॉटलनेक्स या रुकी प्रक्रियाएं जल्दी पकड़ लेते हैं। अंततः, प्रोग्रेस बार शामिल करने से आपके एप्लिकेशन के इंटरफ़ेस की प्रोफेशनलिज़्म बढ़ती है, स्पष्टता और सोच-समझकर बनाए गए यूज़र-सेन्ट्रिक डिज़ाइन का संदेश देती है।

ज्ञात बनाम अज्ञात अवधि वाले कार्य

निश्चित समय वाले कार्यों के लिए determinate प्रोग्रेस बार उपयोग करें। इसमें फ़ाइल प्रोसेसिंग, लूप्स, या मशीन लर्निंग ट्रेनिंग epochs शामिल हैं। यह प्रकार मापने योग्य प्रगति के आधार पर भरता है और उपयोगकर्ताओं को शेष कार्य का स्पष्ट आभास देता है।

अज्ञात लंबाई वाले कार्यों के लिए, जैसे API कॉल्स या बैकग्राउंड जाँच, स्पिनर या indeterminate बार उपयोग करें। ये दर्शाते हैं कि प्रक्रिया जारी है, भले ही समय का पूर्वानुमान न हो सके।

मुझे कौन-सी लाइब्रेरी उपयोग करनी चाहिए?

आपकी लाइब्रेरी इस पर निर्भर करती है कि आप किन कार्यों को पूरा करना चाहते हैं।

कार्य 

लाइब्रेरी

टिप्पणियाँ

उच्च-आवृत्ति लूप्स

tqdm

हल्का, कुशल; अपडेट घटाने हेतु mininterval उपयोग करें

सरल एकमुश्त स्क्रिप्ट्स

progress

न्यूनतम सेटअप, बिना डिपेंडेंसी, त्वरित कार्यों के लिए आदर्श

संरचित या कस्टम आउटपुट

progressbar2

विजेट-आधारित, ETA, टाइमर्स, और लेआउट कंट्रोल सपोर्ट करता है

मल्टी-स्टेज या नेस्टेड कार्य

tqdm, alive-progress

लेयर्ड कार्यों के लिए नेस्टेड बार या मल्टी-बार डिस्प्ले सपोर्ट

विज़ुअल पॉलिश वाले CLI स्क्रिप्ट्स

alive-progress

एनिमेटेड और आधुनिक विज़ुअल्स, स्मूथ यूज़र अनुभव

GUI एप्लिकेशन

tkinter

बिल्ट-इन GUI टूलकिट, determinate और indeterminate बार के साथ

कस्टमाइज़ेशन

प्रोग्रेस बार कस्टमाइज़ करते समय स्पष्टता और उपयोगी जानकारी पर ध्यान दें। दोनों के बीच अच्छा संतुलन रखें। अक्सर, मुख्य मेट्रिक्स वाला साफ-सुथरा बार बहुत अधिक जानकारी से भरे बार से बेहतर होता है। 

आप progressbar2 और alive-progress जैसी लाइब्रेरीज़ का उपयोग कर सकते हैं। ये आपको प्रोग्रेस बार के लेआउट, रंग, और एनीमेशन बदलने देती हैं। यूज़र अनुभव सुधारने के लिए थीम्स या फॉर्मैटिंग अपनाएँ। बहुत अधिक विजेट्स या जटिल विज़ुअल्स से डिस्प्ले न भरें। लक्ष्य सहायक फीडबैक देना है, उपयोगकर्ता का ध्यान भटकाना या उन्हें बोझिल महसूस कराना नहीं।

एक्सेप्शन हैंडलिंग और संगतता परीक्षण

प्रोग्रेस बार लॉजिक को try-except ब्लॉक्स में रखें। यदि कार्य के दौरान कोई त्रुटि हो तो यह UI गड़बड़ी या क्रैश से बचाता है। लंबे समय तक चलने वाली स्क्रिप्ट्स या अनिश्चित बाहरी डिपेंडेंसी पर यह खास अहम है।

साथ ही, अपने प्रोग्रेस बार अलग-अलग परिवेशों में टेस्ट करें। विभिन्न ऑपरेटिंग सिस्टम्स, टर्मिनल प्रकार और डिस्प्ले चौड़ाइयों में जाँचें। इससे सुनिश्चित होगा कि उनका व्यवहार सुसंगत बना रहे।

कुछ लाइब्रेरीज़ Jupyter notebooks, रिमोट टर्मिनल्स, या GUI शेल्स में अलग तरह से व्यवहार कर सकती हैं। अनुकूलता पहले ही सत्यापित करने से अप्रत्याशित समस्याएँ टलती हैं और प्रोडक्शन में उपयोगकर्ताओं का अनुभव बेहतर रहता है।

एक्सेसिबिलिटी पर विचार

प्रोग्रेस इंडिकेटर्स बनाते समय एक्सेसिबिलिटी का ध्यान रखें। इससे सभी उपयोगकर्ताओं को स्पष्ट फीडबैक मिलता है। कुछ सुझाव:

  • प्रोग्रेस दिखाने के लिए केवल रंग या एनीमेशन पर निर्भर न रहें। प्रतिशत, स्टेप काउंट, या समय अनुमान जैसे टेक्स्ट तत्व जोड़ें।
  • बेहतर पठनीयता के लिए स्पष्ट, उच्च-कॉन्ट्रास्ट विज़ुअल्स उपयोग करें।
  • GUI एप्लिकेशंस में अपने प्रोग्रेस बार को स्क्रीन रीडर्स के साथ अच्छी तरह काम करने योग्य बनाएं।
  • कमांड-लाइन टूल्स के लिए, वर्बोसिटी विकल्पों पर विचार करें जो सादा टेक्स्ट में प्रोग्रेस अपडेट प्रिंट करते हैं।

एक्सेसिबिलिटी को प्राथमिकता देने से उपयोगिता बढ़ती है। यह आपके टूल्स को और समावेशी और प्रोफेशनल बनाता है।

निष्कर्ष 

प्रोग्रेस बार किसी भी Python ऐप के लिए सरल परंतु शक्तिशाली फीचर हैं। वे त्वरित फीडबैक देते हैं, उपयोगकर्ता अनुभव सुधारते हैं, और परफॉर्मेंस व कोड की स्पष्टता ट्रैक करते हैं। सही प्रोग्रेस बार लाइब्रेरी चुनना अहम है। यह आपके सॉफ़्टवेयर को बेहतर बना सकता है — चाहे आप त्वरित स्क्रिप्ट बना रहे हों, कमांड-लाइन टूल, या पूरा GUI ऐप। सुविचारित इम्प्लीमेंटेशन आपके सॉफ़्टवेयर की गति, प्रोफेशनलिज़्म, और उपयोगिता को निखार सकता है। कस्टमाइज़ेशन, परफॉर्मेंस, संगतता, और एक्सेसिबिलिटी को प्राथमिकता देने से प्रोग्रेस बार केवल विज़ुअल न रहकर, उपयोगकर्ताओं के आपके काम से जुड़ने का अहम हिस्सा बन जाते हैं।

सीखना जारी रखने के लिए, ये संसाधन देखें:

Python प्रोग्रेस बार FAQs

प्रोग्रेस बार क्या है?

प्रोग्रेस बार एक विज़ुअल इंडिकेटर है जो दिखाता है कि कार्य का कितना भाग पूरा हो चुका है और कितना बाकी है। यह लंबी प्रक्रियाओं के दौरान फीडबैक देकर उपयोगकर्ता अनुभव सुधारता है।

Python में लोकप्रिय प्रोग्रेस बार लाइब्रेरीज़ कौन-सी हैं?

सबसे आम लाइब्रेरीज़ हैं tqdm, progress, progressbar2, और alive-progress।

क्या मैं pandas लाइब्रेरी के साथ प्रोग्रेस बार उपयोग कर सकता/सकती हूँ?

हाँ। tqdm pandas के साथ progress_apply() ( apply के स्थान पर) और समान विधियों के ज़रिए इंटीग्रेट होता है।

क्या मैं प्रोग्रेस बार का रूप-रंग कस्टमाइज़ कर सकता/सकती हूँ?

हाँ। tqdm और progressbar2 जैसी लाइब्रेरीज़ आपको लेआउट, चौड़ाई, रंग और अपडेट आवृत्ति कस्टमाइज़ करने देती हैं।

Jupyter Notebooks के लिए मुझे कौन-सी लाइब्रेरी उपयोग करनी चाहिए?

लाइब्रेरी tqdm.notebook Jupyter के साथ अच्छी तरह इंटीग्रेट होती है।


Mark Pedigo's photo
Author
Mark Pedigo
LinkedIn

मार्क पेडिगो, PhD, स्वास्थ्यसेवा डेटा विज्ञान, प्रोग्रामिंग और शिक्षा में विशेषज्ञता वाले एक प्रतिष्ठित डेटा वैज्ञानिक हैं। गणित में PhD, कंप्यूटर साइंस में B.S., और AI में प्रोफेशनल सर्टिफिकेट रखने वाले मार्क तकनीकी ज्ञान को व्यावहारिक समस्या-समाधान से प्रभावी रूप से जोड़ते हैं। उनके करियर में धोखाधड़ी का पता लगाने, शिशु मृत्यु दर की भविष्यवाणी, और वित्तीय पूर्वानुमान से जुड़ी भूमिकाएँ शामिल रही हैं, साथ ही NASA के लागत आकलन सॉफ़्टवेयर में उनके योगदान भी हैं। एक शिक्षक के रूप में, उन्होंने DataCamp और वॉशिंगटन यूनिवर्सिटी इन सेंट लुईस में पढ़ाया है और कनिष्ठ प्रोग्रामरों का मार्गदर्शन किया है। खाली समय में, मार्क अपनी पत्नी मैंडी और कुत्ते हार्ले के साथ मिनेसोटा की प्राकृतिक सुंदरता का आनंद लेते हैं और जैज़ पियानो बजाते हैं।

विषय
Python

शीर्ष Python कोर्स

लर्निंग पाथ

Python प्रोग्रामिंग की मूल बातें

16 घंटा
अपने Python प्रोग्रामिंग कौशल विकसित करें। मॉड्यूल और पैकेज के साथ काम करना, बिल्ट-इन डेटा टाइप्स का उपयोग करना, और कस्टम फ़ंक्शन लिखना सीखें।
विवरण देखेंपाठ्यक्रम शुरू करें

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।
और देखें