In [1]:
%load_ext watermark
%watermark -v -d -u -p pyprind
last updated: 2018-01-31 

CPython 3.6.3
IPython 6.2.1

pyprind 2.11.2

PyPrind demo


I would be happy to hear your comments and suggestions.
Please feel free to drop me a note via twitter, email, or google+.


Sections



In [2]:
import pyprind



Basic Progress Bar

Using a for-loop

In [3]:
import time

n = 100
timesleep = 0.05

bar = pyprind.ProgBar(n)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05

In a while-loop

In [4]:
import random

random.seed(1)
collection = set()

n = 100
bar = pyprind.ProgBar(n, track_time=False, title='while example')

while len(collection) < n:
    r = random.randint(0, 10**5)
    if r % 7 and r not in collection:
        collection.add(r)
        bar.update()
        time.sleep(timesleep)

print(bar)
while example
0% [##############################] 100%
Title: while example
  Started: 01/31/2018 15:11:30
  Finished: 01/31/2018 15:11:35
  Total time elapsed: 00:00:05



Basic Percentage Indicator

Note: the Percentage indicator is significantly slower due to background computation.
Thus, it is recommended for tasks with less iterations but longer computational time per iteration.

In [5]:
perc = pyprind.ProgPercent(n)
for i in range(n):
    time.sleep(timesleep) # your computation here
    perc.update()
[100 %] Time elapsed: 00:00:05 | ETA: 00:00:00
Total time elapsed: 00:00:05



Progress Bar and Percentage Indicator generators

Alternatively, you can use the progress bar and percentage indicators as generators.

In [6]:
for i in pyprind.prog_bar(range(n)):
    time.sleep(timesleep) # your computation here
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
In [7]:
for i in pyprind.prog_percent(range(n)):
    time.sleep(timesleep) # your computation here
[100 %] Time elapsed: 00:00:05 | ETA: 00:00:00
Total time elapsed: 00:00:05



Progress Bar/Percentage Indicator - Reporting tracking information

Simply print() the tracking object after the tracking has completed.

In [8]:
bar = pyprind.ProgBar(n)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
print(bar)
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
Title: 
  Started: 01/31/2018 15:11:52
  Finished: 01/31/2018 15:11:57
  Total time elapsed: 00:00:05
In [9]:
bar = pyprind.ProgBar(n, monitor=True, title='Job_1')
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
    
# print report for future reference
print(bar)
Job_1
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
Title: Job_1
  Started: 01/31/2018 15:11:57
  Finished: 01/31/2018 15:12:02
  Total time elapsed: 00:00:05
  CPU %: 1.90
  Memory %: 0.26



Progress Bar/Percentage Indicator - Reporting CPU and memory usage

monitor (bool): default False. Monitors CPU and memory usage if True (requires the psutil package).

In [10]:
bar = pyprind.ProgBar(n, monitor=True)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
print(bar)
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
Title: 
  Started: 01/31/2018 15:12:02
  Finished: 01/31/2018 15:12:08
  Total time elapsed: 00:00:05
  CPU %: 1.80
  Memory %: 0.26

In [11]:
perc = pyprind.ProgPercent(n, monitor=True)
for i in range(n):
    time.sleep(timesleep) # your computation here
    perc.update()
print(perc)
[100 %] Time elapsed: 00:00:05 | ETA: 00:00:00
Total time elapsed: 00:00:05
Title: 
  Started: 01/31/2018 15:12:08
  Finished: 01/31/2018 15:12:13
  Total time elapsed: 00:00:05
  CPU %: 6.90
  Memory %: 0.26



Progress Bar/Percentage Indicator - Setting a title

title (str): default ''. A title for the progress bar

In [12]:
bar = pyprind.ProgBar(n, title='My 1st Progress Bar')
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
My 1st Progress Bar
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
In [13]:
perc = pyprind.ProgPercent(n, title='My 1st Percent Tracker')
for i in range(n):
    time.sleep(timesleep) # your computation here
    perc.update()
My 1st Percent Tracker
[100 %] Time elapsed: 00:00:05 | ETA: 00:00:00
Total time elapsed: 00:00:05



Progress Bar - Changing the default width

width (int): default 30. Sets the progress bar width in characters.

In [14]:
bar = pyprind.ProgBar(n, width=10)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
0% [##########] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
In [15]:
bar = pyprind.ProgBar(n, width=70)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
0% [######################################################################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05



Progress Bar/Percentage Indicator - Changing the output stream

stream (int): default 2. Takes 1 for stdout, 2 for stderr, or given stream object

In [16]:
bar = pyprind.ProgBar(n, stream=1)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
In [17]:
bar = pyprind.ProgBar(n, stream=2)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
In [18]:
import sys

bar = pyprind.ProgBar(n, stream=sys.stdout)
for i in range(n):
    time.sleep(timesleep) # your computation here
    bar.update()



Stopping the Progress Bar/Percentage Indicator early

The tracking object can be stopped early via the .stop() method:

In [19]:
bar = pyprind.ProgBar(n)
for i in range(n):
    time.sleep(timesleep) # your computation here
    if i == 5:
        bar.stop()
        break
    bar.update()
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:00



Progress Bar/Percentage Indicator - Printing currently processed items

Sometimes it is useful to print out the name of currently processed items, e.g., files are being processed. This can be done by providing a custom string for the optional item_id parameter of the .update() method.

In [20]:
items = ['file_%s.csv' %i for i in range(1,21)]

bar = pyprind.ProgBar(len(items))
for i in items:
    time.sleep(timesleep) # your computation here
    bar.update(item_id = i)
0% [####################] 100% | ETA: 00:00:00 | Item ID: file_20.csv
Total time elapsed: 00:00:01



Choosing your own progress bar style

In [21]:
bar = pyprind.ProgBar(n, bar_char='█')
for i in range(n):
    time.sleep(0.1) # do some computation
    bar.update()
0% [██████████████████████████████] 100% | ETA: 00:00:00
Total time elapsed: 00:00:10



Controlling the update frequency

Update the progress in after iteration of the loop via the force_flush parameter.

In [22]:
n = 100
bar = pyprind.ProgBar(n, bar_char='█')
for i in range(n):
    time.sleep(0.5) # do some computation
    bar.update(force_flush=True)
0% [██████████████████████████████] 100% | ETA: 00:00:00
Total time elapsed: 00:00:50


Update the progress every 4 seconds using the update_interval parameter.

In [23]:
n = 100
bar = pyprind.ProgBar(n, bar_char='█', update_interval=4)
for i in range(n):
    time.sleep(0.2) # do some computation
    bar.update()
0% [██████████████████████████████] 100% | ETA: 00:00:00
Total time elapsed: 00:00:20
In [24]:
n = 100
bar = pyprind.ProgPercent(n, update_interval=4)
for i in range(n):
    time.sleep(0.2) # do some computation
    bar.update()
[100 %] Time elapsed: 00:00:20 | ETA: 00:00:00
Total time elapsed: 00:00:20