यह उस मामले के लिए एक वैकल्पिक जवाब है जहां tqdm_notebook आपके लिए काम नहीं करता है।
निम्नलिखित उदाहरण दिया:
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values)) as pbar:
for i in values:
pbar.write('processed: %d' %i)
pbar.update(1)
sleep(1)
आउटपुट कुछ इस तरह दिखेगा (प्रगति लाल दिखेगी):
0%| | 0/3 [00:00<?, ?it/s]
processed: 1
67%|██████▋ | 2/3 [00:01<00:00, 1.99it/s]
processed: 2
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
processed: 3
समस्या यह है कि stdout और stderr के आउटपुट को एसिंक्रोनस रूप से और अलग से नई लाइनों के रूप में संसाधित किया जाता है।
अगर कहते हैं कि ज्यूपिटर को पहली पंक्ति में और फिर स्टडआउट पर "संसाधित" आउटपुट प्राप्त होता है। फिर एक बार इसे प्रगति को अपडेट करने के लिए stderr पर एक आउटपुट प्राप्त होता है, यह वापस नहीं जाएगा और पहली पंक्ति को अपडेट करेगा क्योंकि यह केवल अंतिम पंक्ति को अपडेट करेगा। इसकी जगह नई लाइन लिखनी होगी।
वर्कअराउंड 1, लिखने के लिए stdout
एक वर्कअराउंड दोनों स्टडआउट के बजाय आउटपुट के लिए होगा:
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.write('processed: %d' % (1 + i))
pbar.update(1)
sleep(1)
उत्पादन में परिवर्तन होगा (अधिक लाल नहीं):
processed: 1 | 0/3 [00:00<?, ?it/s]
processed: 2 | 0/3 [00:00<?, ?it/s]
processed: 3 | 2/3 [00:01<00:00, 1.99it/s]
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
यहाँ हम देख सकते हैं कि बृहस्पति रेखा के अंत तक स्पष्ट नहीं लगता है। हम रिक्त स्थान जोड़कर इसके लिए एक और समाधान जोड़ सकते हैं। जैसे कि:
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.write('processed: %d%s' % (1 + i, ' ' * 50))
pbar.update(1)
sleep(1)
जो हमें देता है:
processed: 1
processed: 2
processed: 3
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
समाधान 2, इसके बजाय विवरण सेट करें
यह सामान्य रूप से दो आउटपुट न होने के लिए अधिक सीधे आगे हो सकता है, लेकिन इसके बजाय विवरण को अपडेट करें, जैसे:
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.set_description('processed: %d' % (1 + i))
pbar.update(1)
sleep(1)
आउटपुट के साथ (विवरण अद्यतन है जबकि यह प्रसंस्करण है):
processed: 3: 100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
निष्कर्ष
आप इसे ज्यादातर सादे tdm के साथ ठीक काम करने के लिए प्राप्त कर सकते हैं। लेकिन अगर tqdm_notebook आपके लिए काम करता है, तो बस उस का उपयोग करें (लेकिन तब आप शायद उस तक नहीं पढ़ पाएंगे)।
tqdm_notebook
सामान्यprint
एस भी कर सकता हूं , और यह प्रगति पट्टी को प्रभावित नहीं करता है।