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

Tqdm Python: व्यावहारिक उदाहरणों के साथ एक मार्गदर्शिका

tqdm एक Python लाइब्रेरी है जो लूप्स और इटेरेबल्स के लिए तेज़, विस्तार योग्य प्रोग्रेस बार देती है, जिससे आपके कोड की प्रगति को विज़ुअलाइज़ करना आसान हो जाता है।
Tom Farnschläder's photo
Tom Farnschläder
अपडेट किया गया · 11 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

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

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

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

क्या कभी आपने ऐसी स्थिति का सामना किया है जब कोई लंबे समय तक चलने वाली Python स्क्रिप्ट आपको यह सोचने पर मजबूर कर दे कि पर्दे के पीछे कुछ हो भी रहा है या नहीं?

प्रगति की अनिश्चितता आपको लगभग पूर्ण रन को रद्द करने या पहले से बाधित स्क्रिप्ट के लिए अंतहीन प्रतीक्षा करने पर मजबूर कर सकती है।

tqdm Python लाइब्रेरी आपके स्क्रिप्ट्स के लिए प्रगति संकेतक प्रदान करके इस समस्या का समाधान करती है।

tqdm प्रोग्रेस बार उदाहरण

tqdm क्या है?

Tqdm एक Python लाइब्रेरी है जो लूप्स और इटेरेबल्स के लिए तेज, विस्तारयोग्य प्रोग्रेस बार प्रदान करती है। यह समय लेने वाले कार्यों की प्रगति को ट्रैक करने का एक सरल तरीका है।

लाइब्रेरी का नाम अरबी में "प्रगति" (taqadum, تقدّم) का अर्थ रखता है, और स्पेनिश में "मैं आपसे बहुत प्यार करता/करती हूँ" (te quiero demasiado) का संक्षिप्त रूप भी है।

Tdqm इटरेशन गिनकर, बीता हुआ समय और शेष समय निकालकर, और बार के भराव में समग्र प्रगति दिखाकर प्रगति को ट्रैक करता है और प्रोग्रेस बार डिस्प्ले को अपडेट करता है।

यह शेष समय का अनुमान लगाने के लिए स्मार्ट एल्गोरिदम का उपयोग करता है, और ओवरहेड कम रखने के लिए अनावश्यक इटरेशन डिस्प्ले को छोड़ देता है। tqdm का उपयोग कई लाभ देता है, जैसे:

  • दृश्य प्रत्युत्तर: प्रोग्रेस बार उपयोगकर्ताओं को दिखाते हैं कि कार्य का कितना भाग पूरा हो चुका है और शेष भाग में कितना समय लग सकता है।
  • हर जगह काम करता है: tqdm लाइब्रेरी किसी भी प्लेटफॉर्म (Linux, Windows, Mac, FreeBSD, NetBSD, SunOS) पर, किसी भी कंसोल में या GUI में काम करती है।
  • आसान एकीकरण: Tqdm Jupyter notebooks, Pandas जैसी सामान्य लाइब्रेरियों और लूप्स जैसे प्रचलित Python निर्माणों के साथ बखूबी एकीकृत हो जाता है।
  • अनुकूलन: यह प्रोग्रेस बार के रूप-रंग और व्यवहार को अपने अनुसार ढालने के कई विकल्प देता है, जिन पर हम आगे बात करेंगे।
  • प्रदर्शन: जहाँ समान पैकेज जैसे ProgressBar में 800ns/इटरेशन का ओवरहेड होता है, वहीं tdqm का 60ns/इटरेशन ओवरहेड कहीं अधिक तेज काम करता है।

Tqdm कैसे इंस्टॉल करें 

ज्यादातर Python लाइब्रेरियों की तरह, tqdm को इंस्टॉल करने का सबसे आसान तरीका pip पैकेज मैनेजर का उपयोग करना है।

pip install tqdm

Tqdm: सरल उदाहरण

प्रोग्रेस बार बनाने के लिए, हम अपने iterable को tqdm() फ़ंक्शन (जिसे हम tqdm मॉड्यूल से इम्पोर्ट करते हैं) से लपेटते हैं। आइए एक सरल उदाहरण देखें। फ़ंक्शन time.sleep(0.01) हर iteration में चलने वाले कोड के लिए placeholder का काम करता है।

from tqdm import tqdm
    for i in tqdm(range(1000)):
    time.sleep(0.01)
    # …

उदाहरण कोड के प्रोग्रेस बार को 10 सेकंड में पूरा होते हुए दिखाने वाला GIF।

tdqm(range(n)) के लिए एक शॉर्टकट के रूप में आप trange(n) भी उपयोग कर सकते हैं। नीचे दिया गया कोड पिछले वाले जैसा ही आउटपुट लौटाएगा:

from tqdm import tqdm
    for i in trange(1000):
	time.sleep(0.01)
	# …

दोनों उदाहरण ऊपर दिखाए गए जैसे ही प्रोग्रेस बार लौटाएँगे।

प्रोग्रेस बार को ध्यान से देखें कि यह कौन‑सी जानकारी देता है। आइए tqdm द्वारा प्रस्तुत विवरणों को समझें:

  • प्रोग्रेस संकेतक:
    • Iterations का प्रतिशत
    • बार का भराव
    • कुल Iterations का अनुपात
  • मेट्रिक्स:
    • बीता हुआ समय
    • शेष समय का अनुमान
    • प्रदर्शन (प्रति सेकंड Iterations)

Tqdm कस्टमाइज़ेशन: प्रोग्रेस बार को अपना बनाना

Tqdm प्रोग्रेस बार की रूप-रंग और व्यवहार को अनुकूलित करने के लिए कई विकल्प देता है। tqdm के उन्नत उपयोग मामलों पर जाने से पहले हम सबसे महत्वपूर्ण कस्टमाइज़ेशन पैरामीटर्स पर नज़र डालेंगे।

प्रोग्रेस बार का विवरण जोड़ना

एक आम कस्टमाइज़ेशन desc पैरामीटर का उपयोग करके एक वर्णनात्मक लेबल जोड़ना है, जो प्रोग्रेस बार को अधिक सूचनाप्रद बनाता है और अलग‑अलग iterables पर नज़र रखने में मदद करता है।

उदाहरण के लिए, पैरामीटर desc=”Processing large range” जोड़ने से प्रोग्रेस बार के बाएँ ओर शीर्षक “Processing large range” प्रदर्शित होगा।

for _ in tqdm(range(20000000), desc="Processing large range"):
	continue

मैं आपको प्रोत्साहित करता/करती हूँ कि आप ऊपर का कोड अपने वातावरण में desc पैरामीटर के साथ और बिना चलाएँ और अंतर देखें।

कुल iterations की संख्या निर्धारित करना

total पैरामीटर लूप में कुल iterations की संख्या बताता है, जिससे tqdm शेष समय और पूर्णता प्रतिशत का अधिक सटीक अनुमान दे पाता है।

एक बुनियादी उदाहरण में जहाँ tqdm(range()) या trange() का उपयोग किया गया है, यह आवश्यक नहीं है, क्योंकि iterations की संख्या पहले से ही ब्रैकेट्स में सम्मिलित होती है। हालाँकि, दो प्रमुख स्थितियाँ हैं जहाँ total=n (जहाँ n कुल संख्या है) जोड़ना उपयोगी हो सकता है: 

1. ऐसे iterables जिनमें len() मेथड नहीं है: ऐसे iterables के लिए जिनमें len() मेथड नहीं है, जैसे कि जनरेटर्स जिनमें आइटम्स की संख्या अज्ञात होती है, आपको total मान मैन्युअली देना होगा। इस पैरामीटर के बिना, tqdm() केवल पूर्ण हुई iterations की गिनती दिखाएगा। कृपया ध्यान दें कि यदि वास्तविक आइटम्स की संख्या बताई गई total संख्या से अधिक हो जाती है, तो प्रोग्रेस बार फिर से शुरू हो जाएगा।

from tqdm import tqdm
import time
import random
 
# Function generating random number between 1 and 100
def generate_random_numbers():
	while True:
	        yield random.randint(1, 100)
 
# Without total: tqdm() only shows number of iterations, does not know total
for num in tqdm(generate_random_numbers(), desc=’Random Iteration’):
	time.sleep(0.01)
	# …

यह GIF iterations की गिनती दिखाता है जिसमें प्रोग्रेस बार नहीं है।

जब आइटम्स की संख्या अज्ञात हो और हम total निर्दिष्ट न करें तो यह ऐसा दिखता है।

# With total (assuming you know the desired number of iterations): tqdm() shows progress
num_iterations = 1000
for num in tqdm(generate_random_numbers(), total=num_iterations, desc="Random Iteration"):
	time.sleep(0.01)
	# …

इस GIF में, total पैरामीटर निर्दिष्ट करने के बाद प्रोग्रेस बार फिर से दिखाई देता है।

काफी बेहतर, अब प्रोग्रेस बार दिख रहा है!

2. मैन्युअल अपडेट्स: यदि हम किसी फ़ंक्शन के भीतर update() मेथड का उपयोग करके प्रोग्रेस बार को मैन्युअली अपडेट कर रहे हैं, तो सही प्रोग्रेस ट्रैकिंग सुनिश्चित करने के लिए total मान निर्दिष्ट करना आवश्यक है। update() मेथड, उदाहरण के लिए, गतिशील रूप से बदलती प्रक्रियाओं पर प्रतिक्रिया देने या कस्टम प्रोग्रेस ट्रैकिंग लागू करने में सक्षम बनाता है। इस पर हम आगे बात करेंगे।

दिखावट में बदलाव

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

दिखावट में एक और समायोजन colour पैरामीटर से किया जा सकता है। आप ‘green’ जैसे शब्द स्ट्रिंग्स या ‘#00ff00’ जैसे हेएक्साडेसिमल कोड स्ट्रिंग्स दोनों का उपयोग कर सकते हैं।

leave पैरामीटर दिखने के बजाय गायब होने के बारे में है: यह निर्धारित करता है कि पूर्ण होने के बाद प्रोग्रेस बार दृश्य रहे या नहीं। यदि इसे True पर सेट किया गया है, तो लूप समाप्त होने के बाद बार बना रहेगा; यदि False पर सेट है, तो यह गायब हो जाएगा।

आइए एक और उदाहरण में आउटपुट की विज़ुअल भिन्नताएँ देखें। नीचे दिया गया कोड तीन प्रोग्रेस बार बनाता है: एक डिफ़ॉल्ट सेटिंग्स के साथ, एक जिसमें तत्वों का क्रम और रंग बदला गया है, और एक जिसे पूर्ण होने के बाद गायब होने के लिए सेट किया गया है। आउटपुट नीचे दिए गए GIF में दिखाई दे रहे हैं।

from tqdm import tqdm
import time
 
# Progress bar 1: Default settings
for i in tqdm(range(300)):
	time.sleep(0.01)
 
# Progress bar 2: Customized bar format and color
for i in tqdm(range(300), bar_format='[{elapsed}<{remaining}] {n_fmt}/{total_fmt} | {l_bar}{bar} {rate_fmt}{postfix}', colour='yellow'):
	time.sleep(0.01)
 
# Progress bar 3: Customized bar format and color, leave=False
for i in tqdm(range(300), bar_format='[{elapsed}<{remaining}] {n_fmt}/{total_fmt} | {l_bar}{bar} {rate_fmt}{postfix}', colour='red', leave=False):
	time.sleep(0.01)

एक GIF जो तीन अलग‑अलग प्रोग्रेस बार दिखाता है: 1) डिफ़ॉल्ट सेटिंग्स वाला बेसिक प्रोग्रेस बार, 2) पीला प्रोग्रेस बार जिसमें समय से संबंधित जानकारी पूर्णता प्रतिशत और प्रोग्रेस बार के बाएँ है, 3) दूसरे बार का लाल संस्करण जो पूर्ण होने के बाद गायब हो जाता है।

उन्नत उपयोग: अधिक जटिल परिदृश्यों को संभालना

अब जब हमें सरल प्रोग्रेस बार बनाना और उसे कस्टमाइज़ करना आ गया है, तो हम कुछ और उन्नत मामलों की ओर बढ़ सकते हैं।

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

नेस्टेड लूप्स वे होते हैं जो दूसरे लूप्स के भीतर समाहित होते हैं। तदनुसार, नेस्टेड प्रोग्रेस बार वे श्रृंखलाबद्ध प्रोग्रेस बार होते हैं जो अन्य लूप्स के भीतर समाहित लूप्स की प्रत्येक iteration के लिए होते हैं। इन्हें बनाने के लिए, प्रत्येक लूप को tqdm() फ़ंक्शन से लपेटें और प्रत्येक iterable के लिए वर्णनात्मक लेबल जोड़ें। 

निम्नलिखित कोड में तीन नेस्टेड लूप्स हैं और यह दिखाता है कि नेस्टेड प्रोग्रेस बार कैसे दिखाई देंगे:

from tqdm import trange
import time
 
for i in trange(3, desc='outer loop'):
	for j in trange(2, desc='middle loop'):
   		for k in trange(6, desc='inner loop'):
	time.sleep(0.01)

जूपिटर नोटबुक में तीन नेस्टेड प्रोग्रेस बार दिखाने वाला स्क्रीनशॉट। सबसे बाहरी प्रोग्रेस बार outer loop को, बीच का middle loop को, और सबसे भीतरी inner loop को ट्रैक करता है। हर प्रोग्रेस बार अपनी वर्तमान iteration, कुल iterations, शेष समय का अनुमान और प्रतिशत पूर्णता बार दिखाता है। बार्स का क्रम टेक्स्ट में वर्णित के अनुरूप है।

ऊपर के अंतिम आउटपुट में, हम देख सकते हैं कि अलग‑अलग प्रोग्रेस बार किस पैटर्न में अपडेट होते हैं। Tqdm हमेशा सबसे बाहरी लूप से शुरू करेगा और फिर सबसे भीतरी लूप तक पहुँचेगा, जिसकी iterations प्रोसेस होंगी और उसी अनुरूप प्रोग्रेस बार अपडेट होगा।

मान लीजिए हमारे पास उदाहरण की तरह तीन नेस्टेड लूप्स हैं। आरंभिक inner iteration के बाद, यह middle लूप पर जाएगा, उसे एक iteration पूर्ण के रूप में अपडेट करेगा, और फिर वापस inner iterable पर आएगा। यह प्रक्रिया तब तक दोहराई जाती है जब तक middle लूप पूर्ण न हो जाए, जिससे outer बार एक iteration पूर्ण दिखाते हुए अपडेट हो जाएगा।

यही प्रक्रिया outer और middle लूप के बीच भी होती है। अंत में, अंतिम inner रन middle iterable को पूर्ण करता है, जो बदले में आखिरी outer iteration को पूर्ण करता है।

मैन्युअल अपडेट्स

tqdm के साथ प्रोग्रेस बार को मैन्युअली अपडेट करना कई परिस्थितियों में उपयोगी हो सकता है:

  • अज्ञात लंबाई वाले iterables: जब हम ऐसे iterables के साथ काम कर रहे हों जिनकी कोई निश्चित लंबाई नहीं है (जैसे जनरेटर्स, नेटवर्क स्ट्रीम्स), तो हम प्रोसेस किए गए डेटा की मात्रा या पूर्ण हुए ऑपरेशंस की संख्या के आधार पर प्रोग्रेस बार को मैन्युअली अपडेट कर सकते हैं।
  • गतिशील रूप से बदलती प्रक्रियाएँ: यदि iterations की संख्या या प्रति iteration प्रोसेसिंग समय निष्पादन के दौरान बदल सकता है, तो मैन्युअल अपडेट्स हमें प्रोग्रेस बार को उसी अनुसार समायोजित करने देते हैं।
  • कस्टम प्रोग्रेस ट्रैकिंग: प्रोग्रेस बार पर अधिक सूक्ष्म नियंत्रण के लिए, हम विशिष्ट मानदंडों या घटनाओं के आधार पर इसे मैन्युअली अपडेट कर सकते हैं। उदाहरण के लिए, हम कुछ माइलस्टोन्स के पूर्ण होने या किसी बड़े प्रोसेस के भीतर व्यक्तिगत कार्यों की प्रगति के आधार पर प्रोग्रेस बार अपडेट करना चाह सकते हैं।
  • बाहरी प्रणालियों के साथ एकीकरण: यदि हम tqdm को ऐसी बाहरी प्रणालियों या लाइब्रेरियों के साथ इंटीग्रेट कर रहे हैं जो प्रोग्रेस ट्रैक करने का स्वाभाविक तरीका नहीं देतीं, तो मैन्युअल अपडेट्स का उपयोग बाहरी प्रोसेस के साथ प्रोग्रेस बार को सिंक्रनाइज़ करने के लिए किया जा सकता है।

tqdm प्रोग्रेस बार को मैन्युअली अपडेट करने के लिए, यह महत्वपूर्ण है कि total पैरामीटर को अधिकतम अपेक्षित iterations की अनुमानित संख्या के रूप में निर्दिष्ट किया जाए। फिर, जैसे‑जैसे कोड हर नए तत्व को प्रोसेस करता है, update() मेथड का उपयोग करके प्रोग्रेस बार को अपडेट करना होगा। अपडेट का मान पिछली अपडेट के बाद से प्रोसेस की गई iterations की संख्या दर्शाना चाहिए।

मान लीजिए हमें उम्मीद है कि हमारे iterable में अधिकतम 750 तत्व होंगे। इस उदाहरण में, वास्तविक लंबाई 100 से 1000 के बीच एक रैंडम संख्या है, जो हमें ज्ञात नहीं है। हम progress_bar को आरंभ करते हैं और estimated_total को 750 सेट करते हैं। फिर हम डेटा के माध्यम से iterate करते हैं और प्रत्येक पॉइंट प्रोसेस होने के बाद प्रोग्रेस बार अपडेट करते हैं।

from tqdm import tqdm
def process_data(data):
	time.sleep(0.01)        	# simulate processing data
	processed_data = data
	return processed_data
# Generate an iterable with random length between 100 and 1,000
random_length = random.randint(100, 1000)
data_list = [i for i in range(random_length)]
# Define estimated maximum number of iterations
estimated_total = 750 
# Define the progress bar using the estimated_total
progress_bar = tqdm(total=estimated_total)
# Iterating through data list of unknown length
for data in data_list:
	processed_data = process_data(data)
	progress_bar.update(1)

इस GIF में, प्रोग्रेस बार 100% (750/750) पर पूरा होता है, फिर शेष iterations (अंत में 950) की गिनती जारी रहती है।

हमने iterable की लंबाई को कम आँका था, इसलिए 100% पहुँचने के बाद आउटपुट iterations गिनना जारी रखता है।

Multiprocessing

Multiprocessing और threading ऐसे तरीके हैं जो कार्यों को समांतर रूप से चलाने के लिए उपयोग होते हैं, जिससे प्रदर्शन और responsiveness बेहतर होती है। इन परिदृश्यों में, व्यक्तिगत कार्यों या समांतर निष्पादन की समग्र प्रगति को ट्रैक करना चुनौतीपूर्ण हो सकता है। Tqdm इन समानांतर ऑपरेशंस की प्रगति की निगरानी और दृश्य फ़ीडबैक देने के लिए एक उपयोगी उपकरण हो सकता है।

tqdm.contrib.concurrent मॉड्यूल multiprocessing या threading संदर्भों में प्रोग्रेस बार बनाने के लिए विशेष फ़ंक्शंस प्रदान करता है। ये फ़ंक्शंस मुख्य प्रोसेस और वर्कर प्रोसेसेज़ या थ्रेड्स के बीच समन्वय और संचार को संभालते हैं, यह सुनिश्चित करते हुए कि प्रोग्रेस बार सही तरीके से अपडेट हो। ये concurrent.futures API के साथ सहजता से काम करने के लिए डिज़ाइन किए गए हैं, और ProcessPoolExecutor() या ThreadPoolExecutor() फ़ंक्शन का उपयोग करते हैं।

यहाँ tqdm.contrib.concurrent.futures मॉड्यूल का उपयोग करते हुए एक उदाहरण है:

import concurrent.futures
from tqdm.contrib.concurrent import process_map
 
def process_data(data):
	for i in tqdm(range(100), desc=f"Processing {data['name']}"):
	    	# Process data
	    	time.sleep(0.01)
 
if __name__ == '__main__':
	with concurrent.futures.ProcessPoolExecutor() as executor:
	    	results = process_map(process_data, [
	        	{'name': 'dataset1'},
	        	{'name': 'dataset2'},
	# …
	])

इस उदाहरण में, process_data() फ़ंक्शन में उसकी प्रगति को ट्रैक करने के लिए एक tqdm प्रोग्रेस बार शामिल है। process_data() फ़ंक्शन सूची में प्रत्येक डेटा आइटम के लिए समांतर रूप से निष्पादित होगा। इसका अर्थ है कि एक साथ कई प्रोग्रेस बार प्रदर्शित होंगे, जिनमें से प्रत्येक अलग‑अलग प्रोसेस की प्रगति दर्शाएगा। desc पैरामीटर को संबंधित dataset के नाम के आधार पर प्रत्येक प्रोग्रेस बार का विवरण गतिशील रूप से बनाने के लिए सेट किया गया है, जिससे अलग‑अलग प्रोग्रेस बार के बीच अंतर करने में सहायता मिलती है।

pandas के साथ इंटीग्रेशन

tqdm.pandas मॉड्यूल pandas ऑपरेशंस में प्रोग्रेस बार जोड़ने का एक सुविधाजनक तरीका प्रदान करता है। यह विशेष रूप से बड़े DataFrames पर समय लेने वाले ऑपरेशंस के लिए उपयोगी है, क्योंकि यह कार्य की प्रगति का दृश्य फ़ीडबैक देता है। हम किसी भी pandas फ़ंक्शन पर जो पंक्तियों या कॉलम्स पर काम करता है, tqdm.pandas() डेकोरेटर लगा सकते हैं।

शुरू करने के लिए, हम 100,000 पंक्तियों वाला एक रैंडम DataFrame परिभाषित करते हैं और tqdm.pandas() डेकोरेटर कॉल करते हैं। यदि हम प्रोग्रेस बार को कस्टमाइज़ करना चाहते हैं, तो यह सही समय है, क्योंकि progress_apply() और progress_map() फ़ंक्शंस tqdm() पैरामीटर्स नहीं लेते। यहाँ हम नीचे आने वाले प्रोग्रेस बार्स को नाम देना चाहते हैं, इसलिए हम desc पैरामीटर भी निर्दिष्ट करते हैं।

import pandas as pd
import numpy as np
from tqdm import tqdm
 
df = pd.DataFrame(np.random.randint(0, 10, (100000, 6)))
 
tqdm.pandas(desc='DataFrame Operation')

अब हम पंक्तियों, कॉलम्स या पूरे DataFrame पर फ़ंक्शंस लागू कर सकते हैं। apply() या map() में से किसी एक का उपयोग करने के बजाय, progress_apply() या progress_map() कॉल करें, और प्रोग्रेस बार प्रदर्शित होगा। याद रखें कि apply() और progress_apply() DataFrames, पंक्तियों या कॉलम्स पर लागू किए जा सकते हैं, जबकि map() और progress_map() केवल Series या कॉलम्स पर लागू किए जा सकते हैं। उदाहरण के लिए:

# Halving each value in the DataFrame using progress_apply()
Result_apply = df.progress_apply(lambda x: x / 2)
 
# Doubling each element of the first column using progress_map()
result_map = df[0].progress_map(lambda x: x * 2)

Tqdm: आम समस्याएँ और समाधान

आइए कुछ सामान्य Tqdm समस्याओं और त्रुटियों पर चर्चा करें और उन्हें ठीक करना सीखें।

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

tqdm का उपयोग करते समय सबसे आम समस्याओं में से एक है प्रोग्रेस बार का अपडेट न होना। यह अक्सर बफ़रिंग समस्याओं के कारण होता है, खासकर Jupyter Notebooks जैसे वातावरण में। जब आउटपुट बफ़र होता है, तो प्रोग्रेस बार तुरंत प्रदर्शित या अपडेट नहीं हो सकता, जिससे प्रक्रिया के फ्रीज़ या अनुत्तरदायी होने का आभास होता है।

tqdm.notebook मॉड्यूल का उपयोग बफ़रिंग समस्याओं को दूर कर सकता है और सुनिश्चित कर सकता है कि Jupyter Notebooks में प्रोग्रेस बार सही तरीके से अपडेट हो। यह मॉड्यूल विशेष रूप से Jupyter वातावरण के लिए डिज़ाइन किया गया GUI‑आधारित प्रोग्रेस बार प्रदान करता है।

इसके अलावा, यह उपयोगकर्ता‑अनुकूल रंग संकेत देता है (नीला: सामान्य, हरा: पूर्ण, लाल: त्रुटि/इंटरप्ट)।

यदि हम अपने नेस्टेड प्रोग्रेस बार उदाहरण का कोड बीच में रोक दें, तो यह कुछ ऐसा दिखता है:

जूपिटर नोटबुक में तीन नेस्टेड प्रोग्रेस बार की बाधित रन का स्क्रीनशॉट। सभी पूर्ण बार्स हरे रंग में और सभी बाधित बार्स लाल रंग में हैं।

Python में tqdm.notebook का उपयोग करते हुए नेस्टेड प्रोग्रेस बार, जो पूर्ण बनाम बाधित बार्स की रंग योजना दिखाते हैं।

प्रोग्रेस बार के अपडेट न होने की समस्या का समाधान करने का एक और प्रभावी तरीका आउटपुट स्ट्रीम को स्पष्ट रूप से फ्लश करना है। जब डेटा मानक आउटपुट स्ट्रीम पर लिखा जाता है (जैसे print() का उपयोग करते समय), तो डेटा आमतौर पर वास्तविक आउटपुट डिवाइस पर भेजे जाने से पहले बफ़र होता है। आउटपुट स्ट्रीम को फ्लश करने से Python इंटरप्रेटर को कोई भी बफ़र किया हुआ डेटा तुरंत आउटपुट डिवाइस पर भेजने के लिए बाध्य किया जाता है, जिससे यह सुनिश्चित होता है कि डेटा बिना देरी के प्रदर्शित या लिखा जाए। 

आउटपुट को फ्लश करने के लिए, मानक आउटपुट स्ट्रीम की flush() विधि का उपयोग करें। अधिक प्रतिक्रियाशील आउटपुट के लिए, आउटपुट स्ट्रीम को अधिक बार फ्लश करने पर विचार करें, संभवतः हर कुछ इटरेशन के बाद या एक निश्चित समयांतराल पर। ध्यान रखें कि इसमें एक समझौता है, क्योंकि आउटपुट स्ट्रीम को फ्लश करना अतिरिक्त ओवरहेड ला सकता है। यहाँ एक उदाहरण है कि इस विधि को एक सरल tqdm प्रक्रिया में कैसे शामिल करें:

import sys
import time
from tqdm import tqdm
 
for i in tqdm(range(100)):
	time.sleep(0.1)
	sys.stdout.flush()  # Flush the output stream after each iteration

संगतता संबंधी समस्याएँ

हालाँकि tqdm आमतौर पर अधिकांश Python वातावरणों और लाइब्रेरीज़ के साथ संगत है, फिर भी कभी-कभी संगतता संबंधी समस्याएँ या अप्रत्याशित व्यवहार हो सकते हैं। जिन सामान्य स्थितियों से अवगत रहना चाहिए, उनमें शामिल हैं:

  • कस्टम आउटपुट स्ट्रीम: जब कस्टम आउटपुट स्ट्रीम का उपयोग करते हैं या आउटपुट को फ़ाइलों में रीडायरेक्ट करते हैं, तो tqdm अपेक्षा के अनुरूप काम न करे। हमें यह सुनिश्चित करना चाहिए कि जिस आउटपुट स्ट्रीम का हम उपयोग कर रहे हैं, वह प्रोग्रेस बार दिखाने के लिए आवश्यक ऑपरेशन्स का समर्थन करती हो।
  • थर्ड-पार्टी लाइब्रेरीज़: कुछ मामलों में, tqdm थर्ड-पार्टी लाइब्रेरीज़ के साथ अप्रत्याशित तरीके से इंटरैक्ट कर सकता है, खासकर वे जो स्वयं आउटपुट या प्रोग्रेस ट्रैकिंग को संभालती हैं। समस्या हल होती है या नहीं, यह देखने के लिए हम संबंधित थर्ड-पार्टी लाइब्रेरी की सुविधाओं को अक्षम करने या उनमें बदलाव करने का प्रयास कर सकते हैं।
  • संस्करण संगतता: हमेशा tqdm और अन्य लाइब्रेरीज़ के संगत संस्करणों का उपयोग करना एक अच्छा अभ्यास है। Python या अन्य निर्भरताओं के विशिष्ट संस्करणों के साथ किसी भी ज्ञात संगतता समस्याओं के लिए लाइब्रेरी प्रलेखन जाँचें।

संगतता समस्याओं का सामना करते समय, हम निम्न वर्कअराउंड्स पर विचार कर सकते हैं:

  • डाउनग्रेड या अपग्रेड: हम tqdm के किसी अन्य संस्करण को आजमा सकते हैं।
  • कोड में संशोधन: आवश्यकता होने पर, हम किसी भी संगतता टकराव से निपटने के लिए अपने कोड में समायोजन कर सकते हैं।
  • समुदाय से मदद लें: यदि उससे भी मदद न मिले, तो सहायता और संभावित समाधानों के लिए हम tqdm समुदाय या ऑनलाइन फ़ोरम से संपर्क कर सकते हैं।

इन संभावित संगतता समस्याओं और उनके वर्कअराउंड्स को ध्यान में रखते हुए, हम अपने Python प्रोजेक्ट्स में tqdm का उपयोग करते समय आने वाली किसी भी समस्या का प्रभावी रूप से समाधान कर सकते हैं।

निष्कर्ष

संक्षेप में, Tqdm एक Python लाइब्रेरी है जो हमें प्रोग्रेस बार और अन्य उपयोगी आँकड़े उपलब्ध कराती है, जिससे कोड निष्पादन की निगरानी और प्रबंधन आसान हो जाता है।

चाहे आप बड़े डेटा सेट्स पर इटरेशन कर रहे हों, मशीन लर्निंग मॉडल्स ट्रेन कर रहे हों, या कोई अन्य समय लेने वाला ऑपरेशन कर रहे हों, tqdm प्रोग्रेस पर नज़र रखने और अपने कोड की स्थिति के बारे में सूचित रहने का एक सरल, फिर भी शक्तिशाली तरीका प्रदान करता है।

और आगे अन्वेषण के लिए, अन्य DataCamp Python ट्यूटोरियल्स, Tqdm प्रलेखन, या इसका सोर्स कोड और GitHub पर Readme देखें।

FAQs

मैं tqdm के साथ एक सरल प्रोग्रेस बार कैसे बनाऊँ?

tqdm लाइब्रेरी इंस्टॉल और इम्पोर्ट करें, फिर अपने iterable को tqdm() फ़ंक्शन से लपेटें।

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

हाँ, आप tqdm को pandas DataFrames और अन्य लाइब्रेरीज़ के साथ उपयोग कर सकते हैं। tqdm.pandas मॉड्यूल pandas के साथ tqdm के इंटीग्रेशन के लिए विशेष फ़ंक्शंस देता है।

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

हाँ, आप Tqdm के पैरामीटर्स का उपयोग करके बार फ़ॉर्मेट, रंग, कुल इटरेशनों की संख्या, और भी बहुत कुछ कस्टमाइज़ कर सकते हैं।

Tqdm प्रोग्रेस बार सही तरीके से अपडेट नहीं हो रहा है, मुझे क्या करना चाहिए?

बफ़रिंग समस्याओं की जाँच करें, खासकर Jupyter Notebooks में। tqdm.notebook का उपयोग करने या स्पष्ट रूप से आउटपुट फ्लश करने का प्रयास करें। साथ ही, total पैरामीटर का सही उपयोग सुनिश्चित करें।


Tom Farnschläder's photo
Author
Tom Farnschläder
LinkedIn

टॉम एक डेटा साइंटिस्ट और तकनीकी शिक्षक हैं। वे DataCamp के डेटा साइंस ट्यूटोरियल्स और ब्लॉग पोस्ट लिखते और प्रबंधित करते हैं। इससे पहले, टॉम ने Deutsche Telekom में डेटा साइंस में काम किया था।

विषय
Python

Best Python पाठ्यक्रम!

कोर्स

डेवलपर्स के लिए Python परिचय

3 घंटा
183.9K
Python में प्रोग्रामिंग की मूल बातें सीखें। कोई पूर्व ज्ञान आवश्यक नहीं!
विवरण देखेंपाठ्यक्रम शुरू करें

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

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

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