PyPrind

The PyPrind (Python Progress Indicator) module provides a progress bar and a percentage indicator
object that let you track the progress of a loop structure or other iterative computation.
Typical applications include the processing of large data sets to provide an intuitive estimate at runtime about the progress of the computation.

Sections

Installation

Documentation

Optional Parameters

Examples

Contact

Changelog

Installation

You can use the following command to install PyPrind:
pip install pyprind
or
easy_install pyprind

Alternatively, you download the package manually from the Python Package Index https://pypi.python.org/pypi/PyPrind, unzip it, navigate into the package, and use the command:

python setup.py install
or
python3 setup.py install

Documentation

PyPrind consists of two class objects that can visualize the progress of a computation on the output screen.
Progress bars are visualized via a ProgBar() object, and alternatively, the progress can be tracked and shown as percentage via a ProgPercent() object.

The general usage of ProgBar() and ProgPercent() consists of 2 basic steps:

1) initialize a new ProgBar() or ProgPercent() object with the number of iterations of the computation that is to be performed
2) update the ProgBar() or ProgPercent() object for each iteration via the .update()method

n = 10000000
my_prbar = pyprind.ProgBar(n)   # 1) initialization with number of iterations
for i in range(n):
# do some computation my_prbar.update() # 2) update the progress visualization

Optional parameters :

Default Parameters

ProgBar(iterations, track_time=True, width=30, stream=2, title='')  

    iterations (int): number of iterations of the computation
    track_time (bool): prints elapsed time when loop has finished
    width (int): sets the progress bar width in characters.
    stream: takes 1 for stdout, 2 for stderr, or given stream object
    title (str): A title for the progress bar


ProgPercent(iterations, track_time=True, stream=2, title=''):

    iterations (int): number of iterations of the computation
    width (int): width of the progress bar in characters
    track_time (bool): prints elapsed time and estimated time left
    stream: takes 1 for stdout, 2 for stderr, or given stream object
    title (str): A title for the percent indicator
Setting the width of the progress bar

my_prog = pyprind.ProgBar(n, width=70) # default = 50

Set whether CPU time should be reported or not

The optional track_time parameter can be set for both ProgBar() and ProgPercent() objects.

my_prbar = pyprind.ProgBar(n, track_time=False) # default = True
my_perc = pyprind.ProgPercent(n, track_time=False) # default = True

ProgBar objects will print the estimated time left and the total time
when the computation has finished.
ProgPercent objects reports the elapsed time during the computation and prints
the estimated finish time of the loop.

Selecting an output stream

By default, pyprind objects writes output to the Standard error stream (stderr). If you
want to direct the output to the Standard output (stdout), you can initialize pyprind with the argument stream=2.

my_prbar = pyprind.ProgBar(n, stream=1) # writes to stdout
my_prbar = pyprind.ProgBar(n, stream=2) # writes to stderr, default

If you want to use a given stream, just pass that. Example:

my_prbar = pyprint.ProgBar(n, stream=self.stdout)  # writes to given stream

Givin a tracking object a title

If a tracking object is initialized with a title, it is printed when a new tracking
object is initialized. The title and elapsed time can be printed via the print() function after the tracking has finished.

my_prbar = pyprint.ProgBar(n, title='My Progress Bar')

Screen output: My Progress Bar 0% 100% [##############################] | ETA[sec]: 0.000

Printing a tracking object

The print() method can be invoked after the tracking is completed to
print the title and elapsed time to the screen.

n = 1000000
    my_bar = pyprind.ProgBar(n, title='My Progress Bar')
    for i in range(n):
        # do some computation
        my_bar.update()
    print('\n\nPrint tracking object ...\n')
    print(my_bar)

Screen output:

My Progress Bar 0% 100% [##############################] | ETA[sec]: 0.000 Title: My Progress Bar Total time elapsed: 4.049 sec

Print tracking object ...

Title: My Progress Bar Total time elapsed: 4.049 sec

Small note on usage in a custom Django management command.

Django gives you a stdout object on the BaseCommand class. You will need to pass this to pyprind as done above. Also note that by default, Django appends a newline to every write. This uglyfies pyprind output, so ensure the write function gets passed ending="". pyprind will NOT do this for you.

Examples

The following examples shall illustrate the typical usage of the PyPrind package.
A visualization can be viewed on YouTube: http://youtu.be/Ex05RM9vLKE

Example - Progress Bar (simple)

import pyprind

n = 10000000 my_prbar = pyprind.ProgBar(n) for i in range(n): # do some computation my_prbar.update()

Screen Output

sebastian > python3 ./examples/ex1_progress_bar.py
0%                                    100%
[########################################] - ETA[sec]: 0.000
Total time elapsed: 4.481 sec

Example - Percentage Indicator (simple)

import pyprind

n = 1000000 my_perc = pyprind.ProgPercent(n) for i in range(n): # do some computation my_perc.update()

Screen Output

sebastian > python3 ./examples/ex1_percentage_indicator.py
[ 34 %]   elapsed [sec]: 1.377  | ETA [sec]: 2.570

Example - Progress Bar (all arguments)

import pyprind
n = 1000000
    my_bar = pyprind.ProgBar(n, stream=1, width=30, track_time=True, title='My Progress Bar')
    for i in range(n):
        # do some computation
        my_bar.update()
    print('\n\nPrint tracking object ...\n')
    print(my_bar)

Screen Output

My Progress Bar
0%                          100%
[##############################] | ETA[sec]: 0.000
Title: My Progress Bar
Total time elapsed: 4.049 sec

Print trackin object ...

Title: My Progress Bar Total time elapsed: 4.049 sec

Example - Percent Indicator (all arguments)

import pyprind
n = 1000000
    my_per = pyprind.ProgPercent(n, stream=1, track_time=True, title='My Percent Indicator')
    for i in range(n):
        # do some computation
        my_per.update()
    print('\n\nPrint tracking object ...\n')
    print(my_per)

Screen Output

My Percent Indicator
[100 %] elapsed [sec]: 4.205 | ETA[sec]: 0.000
Title: My Percent Indicator
Total time elapsed: 4.206 sec

Print tracking object ...

Title: My Percent Indicator Total time elapsed: 4.206 sec

Contact

If you have any questions or comments about PyPrind, please feel free to contact me via
eMail: se.raschka@gmail.com
or Twitter: @rasbt



Changelog

VERSION 2.3.1

VERSION 2.3.0

VERSION 2.2.0

VERSION 2.1.1

VERSION 2.1.0

VERSION 2.0.3

VERSION 2.0.2

VERSION 2.0.1

VERSION 2.0.0

VERSION 1.1.1

VERSION 1.1.0

VERSION 1.0.4

VERSION 1.0.3

VERSION 1.0.2

VERSION 1.0.1