Skip to main content

Simple to use progress bar with subprocesses and threads.

Project description

Multiprogress

A simple to use progress_bar in sub-processes or threads using rich. See the examples folder for more examples.

import time
import random
from concurrent.futures import ProcessPoolExecutor
from multiprogress import MultiProgress, progress_bar


def do_work(n: int) -> int:
    sleep_for = random.randint(0, 2)
    for _ in progress_bar(
        range(1, n + 2), desc=f"Sleeping for {sleep_for} secs for each {n} iterations."
    ):
        time.sleep(sleep_for)
    return sleep_for


def demo():
    with ProcessPoolExecutor() as p, MultiProgress():
        print(list(p.map(do_work, range(10))))

Install

pip install multiprog

Using Other Rich Features

[!Note] The progress_bar doesn't need to know about the MultiProgress instance. The only time the two components will need to be aware of one another is the case of multiple instances of MultiProgress being used in the main process. In such cases you will use a key (a string) to send progress updates to the correct instance.

import time
import random
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from multiprogress import MultiProgress, progress_bar
from itertools import chain
from rich import print
from rich.layout import Layout
from rich.panel import Panel
from rich.console import Group
from rich.live import Live


def do_work(n: int, key: str) -> int:
    sleep_for = random.randint(0, 2)
    for _ in progress_bar(
        range(1, n + 2),
        desc=f"Sleeping for {sleep_for} secs for each {n} iterations.",
        key=key,
    ):
        time.sleep(sleep_for)
    return n


def demo():
    progress_p = MultiProgress(key="process", live_mode=False, transient=True)
    progress_t = MultiProgress(key="thread", live_mode=False, transient=True)
    layout = Layout()
    layout.split_column(
        Layout(Panel(progress_p, title="processes"), name="top"),
        Layout(Panel(progress_t, title="threads"), name="bottom"),
    )
    with ThreadPoolExecutor() as t, ProcessPoolExecutor() as p, progress_p, progress_t, Live(
        layout
    ):
        p_futures = [p.submit(do_work, i, "process") for i in range(1, 10)]
        t_futures = [t.submit(do_work, i, "thread") for i in range(1, 10)]
        for f in as_completed(chain(p_futures, t_futures)):
            print(f"Done processing {f.result()}")


if __name__ == "__main__":
    demo()

asciicast

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

multiprog-0.1.3.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

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

multiprog-0.1.3-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file multiprog-0.1.3.tar.gz.

File metadata

  • Download URL: multiprog-0.1.3.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.6

File hashes

Hashes for multiprog-0.1.3.tar.gz
Algorithm Hash digest
SHA256 23079e29a540d13d159d0c1aebae640aff83e6cbfe99aef57f2378e45ee2d9e7
MD5 808d5bfb74d274f70df021f44fcabaec
BLAKE2b-256 23624011f7c7490ea556d7e9ec33995794c7bbf6cb40c87083eff65658a92e6b

See more details on using hashes here.

File details

Details for the file multiprog-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: multiprog-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.6

File hashes

Hashes for multiprog-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a224e30257de2d046c58e891eae8d4a916224d085aeb9abdd11e7b2b4c89fa84
MD5 8799b515a9e44fde86904d0d4f332cd5
BLAKE2b-256 d7a156fa5c8b488590735693a0e3ad8e1c348c4f0a6b338e2eeabf5a5265e88d

See more details on using hashes here.

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