mqdm
Pretty, worker-aware progress bars for Python loops, process/thread pools, async work, nested workers, and non-interactive environments.
mqdm keeps a tqdm-like feel, but is designed to work seamlessly across
parallel workers. It is a good fit when progress needs to survive processes,
threads, nested work, or worker logging without tearing up the terminal.
Install
pip install mqdm
Quick look
import time
import mqdm
for folder in mqdm.mqdm(["cats", "clouds", "notes"], desc="indexing"):
for _ in mqdm.mqdm(range(5), desc=lambda _, i: f"{folder} · file {i + 1}"):
time.sleep(0.05)
In parallel:
import time
import mqdm
def do_work(folder):
for _ in mqdm.mqdm(range(5), desc=lambda _, i: f"{folder} · file {i + 1}"):
time.sleep(0.05)
def main():
mqdm.pool(do_work, ["cats", "clouds", "notes"], desc="indexing", n_workers=3)
if __name__ == "__main__":
main()
For CI, agents, and other non-interactive consumers, use stable line-oriented output:
MQDM_OUTPUT=plain python worker.py
See the AI and integration guide for
the quickest way to choose between mqdm, tqdm, Rich, and raw executors.
Full docs can be found here.
Docs
Local preview:
pip install -e ".[docs]"
mkdocs serve
Tests
pip install -e ".[test]"
pytest
Test across multiple Python versions:
for py in 3.10 3.11 3.12 3.13 3.14 3.15; do
echo "=== Python $py ==="
uv run --python $py pytest tests/ -q 2>&1 || break
done
Metadata
Release files for mqdm 2.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mqdm-2.0.7.tar.gz | 63.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mqdm-2.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 118.4 kB
Release files / mqdm-2.0.7.tar.gz
| Download URL | mqdm-2.0.7.tar.gz |
|---|---|
| Size | 63.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
071e99e1eba7e6ec03d481e1e5ef59de832eca554bd9d975f77d0504ff1a4256
|
|
BLAKE2b-256 checksum How to use checksums |
bffd68280b9cb243f48ef006673cedfbf6822d3b609d244650f651b15d9de967
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mqdm-2.0.7-py3-none-any.whl
| Download URL | mqdm-2.0.7-py3-none-any.whl |
|---|---|
| Size | 54.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7ae6efa77c3ce6a8b664d63d109f3f1fe2a9edc32302090b8420066b0a18c505
|
|
BLAKE2b-256 checksum How to use checksums |
e7fe210b80ead134988b6d61510ecfb126f9e60bb40e569075368cb3e03f6f2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|