# ProgressBox 📦
> Stage-aware progress monitoring for parallel Python jobs



## Features
- 🎯 **Stage-aware tracking** - Monitor different stages of computation with timing analysis
- ⚡ **True parallelism** - Built for multiprocessing, threading, and joblib
- 📊 **Rich statistics** - ETA, throughput, stage timing breakdown
- 🖼️ **Beautiful display** - Fixed-width Unicode box with perfect alignment
- 🔧 **Production ready** - Logging, snapshots, error handling
## Installation
```bash
pip install progressbox
```
## Quick Start
```python
import progressbox as pbox
# Simple usage
config = pbox.Config(total=100, n_workers=4)
with pbox.Progress(config) as progress:
for i in range(100):
progress.task_start(i, worker=i % 4)
progress.task_update(i, stage="processing")
# ... do work ...
progress.task_finish(i)
```
## Joblib Integration
```python
from joblib import Parallel, delayed
import progressbox as pbox
# Your existing joblib code, now with progress!
results = pbox.adapters.joblib_progress(
items,
process_func,
n_jobs=6,
config=pbox.Config(total=len(items))
)
```
## Documentation
See [full documentation](https://progressbox.readthedocs.io) for more examples and API reference.
## License
MIT License - see LICENSE file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "progressbox",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "progress, parallel, monitoring, multiprocessing, joblib",
"author": null,
"author_email": "Zaafir Hasan <zaafirfhasan@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/09/82/ceb4da402ab23c0c191ac1112df9bc761510bb16a21bfc1fc2bc312b2143/progressbox-0.1.0a2.tar.gz",
"platform": null,
"description": "# ProgressBox \ud83d\udce6\r\n\r\n> Stage-aware progress monitoring for parallel Python jobs\r\n\r\n\r\n\r\n\r\n\r\n## Features\r\n\r\n- \ud83c\udfaf **Stage-aware tracking** - Monitor different stages of computation with timing analysis\r\n- \u26a1 **True parallelism** - Built for multiprocessing, threading, and joblib\r\n- \ud83d\udcca **Rich statistics** - ETA, throughput, stage timing breakdown\r\n- \ud83d\uddbc\ufe0f **Beautiful display** - Fixed-width Unicode box with perfect alignment\r\n- \ud83d\udd27 **Production ready** - Logging, snapshots, error handling\r\n\r\n## Installation\r\n\r\n```bash\r\npip install progressbox\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\nimport progressbox as pbox\r\n\r\n# Simple usage\r\nconfig = pbox.Config(total=100, n_workers=4)\r\nwith pbox.Progress(config) as progress:\r\n for i in range(100):\r\n progress.task_start(i, worker=i % 4)\r\n progress.task_update(i, stage=\"processing\")\r\n # ... do work ...\r\n progress.task_finish(i)\r\n```\r\n\r\n## Joblib Integration\r\n\r\n```python\r\nfrom joblib import Parallel, delayed\r\nimport progressbox as pbox\r\n\r\n# Your existing joblib code, now with progress!\r\nresults = pbox.adapters.joblib_progress(\r\n items,\r\n process_func,\r\n n_jobs=6,\r\n config=pbox.Config(total=len(items))\r\n)\r\n```\r\n\r\n## Documentation\r\n\r\nSee [full documentation](https://progressbox.readthedocs.io) for more examples and API reference.\r\n\r\n## License\r\n\r\nMIT License - see LICENSE file for details.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Stage-aware progress monitoring for parallel Python jobs",
"version": "0.1.0a2",
"project_urls": null,
"split_keywords": [
"progress",
" parallel",
" monitoring",
" multiprocessing",
" joblib"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d2b24f7477bb0a12a72520c27569854b23b3c250be7283915745a7a2e291070d",
"md5": "ce915242b3f7c3e5ae9c06613f66703f",
"sha256": "65e6f2784ae875a8381a2951e428b2c9e6e9ba8173c00b151ce1d02ba9ab836a"
},
"downloads": -1,
"filename": "progressbox-0.1.0a2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ce915242b3f7c3e5ae9c06613f66703f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 56880,
"upload_time": "2025-09-05T00:25:39",
"upload_time_iso_8601": "2025-09-05T00:25:39.130193Z",
"url": "https://files.pythonhosted.org/packages/d2/b2/4f7477bb0a12a72520c27569854b23b3c250be7283915745a7a2e291070d/progressbox-0.1.0a2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0982ceb4da402ab23c0c191ac1112df9bc761510bb16a21bfc1fc2bc312b2143",
"md5": "e9a6a3363106087813d86777fdeec419",
"sha256": "8852701a591a407f550ac6757d0c36061dfd52c574d541a830c0c2c69c2975ea"
},
"downloads": -1,
"filename": "progressbox-0.1.0a2.tar.gz",
"has_sig": false,
"md5_digest": "e9a6a3363106087813d86777fdeec419",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 50470,
"upload_time": "2025-09-05T00:25:40",
"upload_time_iso_8601": "2025-09-05T00:25:40.245273Z",
"url": "https://files.pythonhosted.org/packages/09/82/ceb4da402ab23c0c191ac1112df9bc761510bb16a21bfc1fc2bc312b2143/progressbox-0.1.0a2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-05 00:25:40",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "progressbox"
}