Skip to main content

Progress bars for threading and multiprocessing tasks

Project description

PyPI - Version PyPI - Python Version Anaconda-Server Badge DOI

Test Status Test Status codecov

atpbar

Progress bars for threading and multiprocessing tasks on the terminal and Jupyter Notebook.

Demo

atpbar can display multiple progress bars simultaneously growing to show the progress of each iteration of loops in threading or multiprocessing tasks. atpbar can display progress bars on the terminal and Jupyter Notebook.

Quick Start

This short tutorial shows the basic usage of atpbar with simple examples.

Installation

You can use pip to install atpbar:

pip install atpbar

How to use

Start Python

You can try the examples in this tutorial in the Python interactive shell.

$ python
Python 3.13.9 (...)
...
...
>>>

Import packages

Import atpbar and other objects that we will use in the examples.

from random import randint
from time import sleep
from atpbar import atpbar

One loop

The atpbar can wrap an iterable to show a progress bar for the iterations.

n = randint(1000, 10000)  # Random number of iterations
for _ in atpbar(range(n)):
    sleep(0.001)

This example randomly selects the number of iterations and, in each iteration, sleeps for a short time.

The progress bar will be shown as the loop progresses.

  51.25% ::::::::::::::::::::                     |     4132 /     8062 |:  range(0, 8062)

Note: atpbar won't show a progress bar if the length of the iterable cannot be obtained by len().

Nested loops

The atpbar can show progress bars for nested loops.

for i in atpbar(range(4), name='Outer'):
    n = randint(1000, 10000)
    for _ in atpbar(range(n), name=f'Inner {i}'):
        sleep(0.001)

This example iterates over an outer loop four times. In each iteration, it iterates over an inner loop. The progress bars for both the outer and inner loops are shown.

 100.00% :::::::::::::::::::::::::::::::::::::::: |     3287 /     3287 |:  Inner 0
 100.00% :::::::::::::::::::::::::::::::::::::::: |     5850 /     5850 |:  Inner 1
  50.00% ::::::::::::::::::::                     |        2 /        4 |:  Outer
  34.42% :::::::::::::                            |     1559 /     4529 |:  Inner 2

In the snapshot of the progress bars above, the outer loop is in its third iteration. The inner loop has been completed twice and is running the third. The progress bars for the completed tasks move up. The progress bars for the active tasks are growing at the bottom.

Threading

As the last example, we show how to use atpbar with threading. We will use the ThreadPoolExecutor from the concurrent.futures module.

Import ThreadPoolExecutor and also flushing from atpbar.

from concurrent.futures import ThreadPoolExecutor
from atpbar import flushing

Define a function that will be executed by the threads.

def func(n, name):
    for _ in atpbar(range(n), name=name):
        sleep(0.001)

We will submit ten jobs each runs the func function to five threads.

n_workers = 5
n_jobs = 10

with flushing(), ThreadPoolExecutor(max_workers=n_workers) as executor:
    for i in range(n_jobs):
        n = randint(1000, 10000)
        executor.submit(func, n, name=f'Job {i}')

The context manager flushing() exits after the progress bars have finished updating.

The progress bars will be simultaneously updated for concurrent jobs.

 100.00% :::::::::::::::::::::::::::::::::::::::: |     2326 /     2326 |:  Job 0
 100.00% :::::::::::::::::::::::::::::::::::::::: |     2971 /     2971 |:  Job 1
 100.00% :::::::::::::::::::::::::::::::::::::::: |     1386 /     1386 |:  Job 6
 100.00% :::::::::::::::::::::::::::::::::::::::: |     5316 /     5316 |:  Job 3
 100.00% :::::::::::::::::::::::::::::::::::::::: |     7786 /     7786 |:  Job 4
 100.00% :::::::::::::::::::::::::::::::::::::::: |     5500 /     5500 |:  Job 5
  91.33% ::::::::::::::::::::::::::::::::::::     |     8188 /     8965 |:  Job 2
  39.85% :::::::::::::::                          |     3842 /     9642 |:  Job 7
  34.89% :::::::::::::                            |     2882 /     8260 |:  Job 8
  29.11% :::::::::::                              |      414 /     1422 |:  Job 9

Jupyter Notebook

On Jupyter Notebook, progress bars based on ipywidgets are displayed.

You can try interactively online: Binder

For more information

This is the end of the quick start tutorial. For more information, see the Users Guide.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atpbar-2.0.8.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atpbar-2.0.8-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file atpbar-2.0.8.tar.gz.

File metadata

  • Download URL: atpbar-2.0.8.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for atpbar-2.0.8.tar.gz
Algorithm Hash digest
SHA256 d29c647ed79691b2e183e88b16f0363ee423f3c2948f6053cf07ef6fce0d5a04
MD5 b5243fbe1019db085ebe1d34c17e7277
BLAKE2b-256 7aa1d1d4e5e74a99980d1b3c731b85a1602ba1c53cb4af0950aa005d3de6ee68

See more details on using hashes here.

Provenance

The following attestation bundles were made for atpbar-2.0.8.tar.gz:

Publisher: pypi.yml on alphatwirl/atpbar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atpbar-2.0.8-py3-none-any.whl.

File metadata

  • Download URL: atpbar-2.0.8-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for atpbar-2.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 5fa27d11c6699851fc8a964e4e4afb8cd7f4b1da7bfb9a1dc99951fa3a9fef18
MD5 e40f58626f92b003f2ebfa48d66510b9
BLAKE2b-256 a2233aecbe4c0cfefec791930d42a10411000e2c2c9d9b7d4123ee18b9d09757

See more details on using hashes here.

Provenance

The following attestation bundles were made for atpbar-2.0.8-py3-none-any.whl:

Publisher: pypi.yml on alphatwirl/atpbar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page