reporting-pool


Namereporting-pool JSON
Version 0.1.4 PyPI version JSON
download
home_pageNone
SummaryA wrapper around multiprocessing.Pool that keeps track of the completion and exceptions.
upload_time2024-09-10 18:54:28
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Reporting Pool

A simple wrapper around Python multiprocessing Pool that allows tracking of progress and storage of exceptions. 

While starmap runs, a report is printed that shows % of jobs completed, time elapsed, estimated remaining time and a list of jobs statuses. Status can be: 
    Q -- queued,
    R -- running,
    S -- success,
    F -- failed (in case track_failures is enabled).

The wrapper runs [multiprocessing.pool.starmap](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool.starmap) on the `func` and `p_args` (see [Examples](#Examples)). 

Enabling `track_failures` allows native tracking of failed function runs. For other arguments, see help(ReportingPool).

For many people, a [tqdm tracking of parallel processes](https://leimao.github.io/blog/Python-tqdm-Multiprocessing/) would be a simpler solution. The Reporting Pool is useful when each process prints a lot of information that cannot be suppressed, so a high-frequency reporting is useful, and can raise exceptions for unpredictable reasons breaking program flow.

Suggestions and contributions are welcome.

## Getting Started

This project's code is available on [GitHub](https://github.com/nishbo/reporting_pool).

### Prerequisites

Software:
- Python 3+ (tested on 3.7, 3.8, 3.11, 3.12)

### Installation

Reporting pool can now be installed from pypi:

```
py -m pip install reporting_pool
```

#### Install from source

1. Download the [repository](https://github.com/nishbo/reporting_pool) or clone it using git: `git clone https://github.com/nishbo/reporting_pool.git`.
2. Open Terminal, Command Line, or the desired Anaconda environment in the project folder.
3. Run `python setup.py install`.

## Examples

Example of a normal use:

```
from reporting_pool import ReportingPool

def _reporting_pool_test_func_wof(v):
    time.sleep(0.25)
    return v**2

p_args = [[v] for v in range(40)]

pool = ReportingPool(_reporting_pool_test_func_wof, p_args, processes=8,
                     report_on_change=True)
res = pool.start()

print(res)
```

Output:
```
Completed 0.00% of jobs. Time elapsed: 0.00 s, remaining: NaN s. List: QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 20.00% of jobs. Time elapsed: 0.28 s, remaining: 1.13 s. List: SRSRSRSRSRSRSRSRQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 25.00% of jobs. Time elapsed: 0.53 s, remaining: 1.59 s. List: SSSSSRSRSRSRSRSRRQRQQQQQQQQQQQQQQQQQQQQQ.
Completed 40.00% of jobs. Time elapsed: 0.56 s, remaining: 0.84 s. List: SSSSSSSSSSSSSSSSRQRQRQRQRQRQRQRQQQQQQQQQ.
Completed 42.50% of jobs. Time elapsed: 0.78 s, remaining: 1.06 s. List: SSSSSSSSSSSSSSSSSRRQRQRQRQRQRQRQQQQQQQQQ.
Completed 60.00% of jobs. Time elapsed: 0.81 s, remaining: 0.54 s. List: SSSSSSSSSSSSSSSSSRSRSRSRSRSRSRSRQQQQQQQQ.
Completed 65.00% of jobs. Time elapsed: 1.06 s, remaining: 0.57 s. List: SSSSSSSSSSSSSSSSSSSSSRSRSRSRSRSRRQRQQQQQ.
Completed 80.00% of jobs. Time elapsed: 1.09 s, remaining: 0.27 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQRQRQRQ.
Completed 82.50% of jobs. Time elapsed: 1.31 s, remaining: 0.28 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQRQRQ.
Completed 90.00% of jobs. Time elapsed: 1.34 s, remaining: 0.15 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSRSRSR.
Completed 95.00% of jobs. Time elapsed: 1.59 s, remaining: 0.08 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSR.
Reporting pool finished after 1.6205 s.
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521]
```

Example where the function can throw exceptions:

```
from reporting_pool import ReportingPool

# a function that throws an error
def _reporting_pool_test_func_wf(v):
    time.sleep(0.25)
    if v % 6 == 0:
        raise ValueError()
    return v**2

p_args = [[v] for v in range(40)]

pool = ReportingPool(_reporting_pool_test_func_wf, p_args,
                     report_rate=20, track_failures=True)
res = pool.start()

print(res)
```

Output:
```
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521]
Completed 0.00% of jobs. Time elapsed: 0.00 s, remaining: NaN s. List: QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 0.00% of jobs. Time elapsed: 0.07 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 0.00% of jobs. Time elapsed: 0.13 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 0.00% of jobs. Time elapsed: 0.19 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 0.00% of jobs. Time elapsed: 0.26 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.
Completed 30.00% of jobs. Time elapsed: 0.32 s, remaining: 0.75 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.
Completed 30.00% of jobs. Time elapsed: 0.38 s, remaining: 0.89 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.
Completed 30.00% of jobs. Time elapsed: 0.44 s, remaining: 1.04 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.
Completed 30.00% of jobs. Time elapsed: 0.51 s, remaining: 1.19 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.
Completed 60.00% of jobs. Time elapsed: 0.57 s, remaining: 0.38 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.
Completed 60.00% of jobs. Time elapsed: 0.63 s, remaining: 0.42 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.
Completed 60.00% of jobs. Time elapsed: 0.70 s, remaining: 0.47 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.
Completed 60.00% of jobs. Time elapsed: 0.76 s, remaining: 0.51 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.
Completed 77.50% of jobs. Time elapsed: 0.83 s, remaining: 0.24 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFRRRRRRRRR.
Completed 90.00% of jobs. Time elapsed: 0.89 s, remaining: 0.10 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.
Completed 90.00% of jobs. Time elapsed: 0.95 s, remaining: 0.11 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.
Completed 90.00% of jobs. Time elapsed: 1.01 s, remaining: 0.11 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.
Completed 95.00% of jobs. Time elapsed: 1.08 s, remaining: 0.06 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSRR.
Reporting pool finished after 1.1385 s.
Jobs 0, 6, 12, 18, 24, 30, 36 were not finished correctly.
[None, 1, 4, 9, 16, 25, None, 49, 64, 81, 100, 121, None, 169, 196, 225, 256, 289, None, 361, 400, 441, 484, 529, None, 625, 676, 729, 784, 841, None, 961, 1024, 1089, 1156, 1225, None, 1369, 1444, 1521]
```

## Authors

- [**Anton Sobinov**](https://github.com/nishbo)


##### Keywords
python, multiprocessing, pool, starmap

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "reporting-pool",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Anton Sobinov <an.sobinov@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/f2/9b/6386f2fe8e6a0ec1627fa0f66cd255e6f9be21ee8a45d9c2e1ce31c3fa58/reporting_pool-0.1.4.tar.gz",
    "platform": null,
    "description": "# Reporting Pool\r\n\r\nA simple wrapper around Python multiprocessing Pool that allows tracking of progress and storage of exceptions. \r\n\r\nWhile starmap runs, a report is printed that shows % of jobs completed, time elapsed, estimated remaining time and a list of jobs statuses. Status can be: \r\n    Q -- queued,\r\n    R -- running,\r\n    S -- success,\r\n    F -- failed (in case track_failures is enabled).\r\n\r\nThe wrapper runs [multiprocessing.pool.starmap](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool.starmap) on the `func` and `p_args` (see [Examples](#Examples)). \r\n\r\nEnabling `track_failures` allows native tracking of failed function runs. For other arguments, see help(ReportingPool).\r\n\r\nFor many people, a [tqdm tracking of parallel processes](https://leimao.github.io/blog/Python-tqdm-Multiprocessing/) would be a simpler solution. The Reporting Pool is useful when each process prints a lot of information that cannot be suppressed, so a high-frequency reporting is useful, and can raise exceptions for unpredictable reasons breaking program flow.\r\n\r\nSuggestions and contributions are welcome.\r\n\r\n## Getting Started\r\n\r\nThis project's code is available on [GitHub](https://github.com/nishbo/reporting_pool).\r\n\r\n### Prerequisites\r\n\r\nSoftware:\r\n- Python 3+ (tested on 3.7, 3.8, 3.11, 3.12)\r\n\r\n### Installation\r\n\r\nReporting pool can now be installed from pypi:\r\n\r\n```\r\npy -m pip install reporting_pool\r\n```\r\n\r\n#### Install from source\r\n\r\n1. Download the [repository](https://github.com/nishbo/reporting_pool) or clone it using git: `git clone https://github.com/nishbo/reporting_pool.git`.\r\n2. Open Terminal, Command Line, or the desired Anaconda environment in the project folder.\r\n3. Run `python setup.py install`.\r\n\r\n## Examples\r\n\r\nExample of a normal use:\r\n\r\n```\r\nfrom reporting_pool import ReportingPool\r\n\r\ndef _reporting_pool_test_func_wof(v):\r\n    time.sleep(0.25)\r\n    return v**2\r\n\r\np_args = [[v] for v in range(40)]\r\n\r\npool = ReportingPool(_reporting_pool_test_func_wof, p_args, processes=8,\r\n                     report_on_change=True)\r\nres = pool.start()\r\n\r\nprint(res)\r\n```\r\n\r\nOutput:\r\n```\r\nCompleted 0.00% of jobs. Time elapsed: 0.00 s, remaining: NaN s. List: QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 20.00% of jobs. Time elapsed: 0.28 s, remaining: 1.13 s. List: SRSRSRSRSRSRSRSRQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 25.00% of jobs. Time elapsed: 0.53 s, remaining: 1.59 s. List: SSSSSRSRSRSRSRSRRQRQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 40.00% of jobs. Time elapsed: 0.56 s, remaining: 0.84 s. List: SSSSSSSSSSSSSSSSRQRQRQRQRQRQRQRQQQQQQQQQ.\r\nCompleted 42.50% of jobs. Time elapsed: 0.78 s, remaining: 1.06 s. List: SSSSSSSSSSSSSSSSSRRQRQRQRQRQRQRQQQQQQQQQ.\r\nCompleted 60.00% of jobs. Time elapsed: 0.81 s, remaining: 0.54 s. List: SSSSSSSSSSSSSSSSSRSRSRSRSRSRSRSRQQQQQQQQ.\r\nCompleted 65.00% of jobs. Time elapsed: 1.06 s, remaining: 0.57 s. List: SSSSSSSSSSSSSSSSSSSSSRSRSRSRSRSRRQRQQQQQ.\r\nCompleted 80.00% of jobs. Time elapsed: 1.09 s, remaining: 0.27 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQRQRQRQ.\r\nCompleted 82.50% of jobs. Time elapsed: 1.31 s, remaining: 0.28 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQRQRQ.\r\nCompleted 90.00% of jobs. Time elapsed: 1.34 s, remaining: 0.15 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSRSRSR.\r\nCompleted 95.00% of jobs. Time elapsed: 1.59 s, remaining: 0.08 s. List: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSR.\r\nReporting pool finished after 1.6205 s.\r\n[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521]\r\n```\r\n\r\nExample where the function can throw exceptions:\r\n\r\n```\r\nfrom reporting_pool import ReportingPool\r\n\r\n# a function that throws an error\r\ndef _reporting_pool_test_func_wf(v):\r\n    time.sleep(0.25)\r\n    if v % 6 == 0:\r\n        raise ValueError()\r\n    return v**2\r\n\r\np_args = [[v] for v in range(40)]\r\n\r\npool = ReportingPool(_reporting_pool_test_func_wf, p_args,\r\n                     report_rate=20, track_failures=True)\r\nres = pool.start()\r\n\r\nprint(res)\r\n```\r\n\r\nOutput:\r\n```\r\n[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521]\r\nCompleted 0.00% of jobs. Time elapsed: 0.00 s, remaining: NaN s. List: QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 0.00% of jobs. Time elapsed: 0.07 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 0.00% of jobs. Time elapsed: 0.13 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 0.00% of jobs. Time elapsed: 0.19 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 0.00% of jobs. Time elapsed: 0.26 s, remaining: NaN s. List: RRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.\r\nCompleted 30.00% of jobs. Time elapsed: 0.32 s, remaining: 0.75 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.\r\nCompleted 30.00% of jobs. Time elapsed: 0.38 s, remaining: 0.89 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.\r\nCompleted 30.00% of jobs. Time elapsed: 0.44 s, remaining: 1.04 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.\r\nCompleted 30.00% of jobs. Time elapsed: 0.51 s, remaining: 1.19 s. List: FSSSSSFSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQ.\r\nCompleted 60.00% of jobs. Time elapsed: 0.57 s, remaining: 0.38 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.\r\nCompleted 60.00% of jobs. Time elapsed: 0.63 s, remaining: 0.42 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.\r\nCompleted 60.00% of jobs. Time elapsed: 0.70 s, remaining: 0.47 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.\r\nCompleted 60.00% of jobs. Time elapsed: 0.76 s, remaining: 0.51 s. List: FSSSSSFSSSSSFSSSSSFSSSSSRRRRRRRRRRRRQQQQ.\r\nCompleted 77.50% of jobs. Time elapsed: 0.83 s, remaining: 0.24 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFRRRRRRRRR.\r\nCompleted 90.00% of jobs. Time elapsed: 0.89 s, remaining: 0.10 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.\r\nCompleted 90.00% of jobs. Time elapsed: 0.95 s, remaining: 0.11 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.\r\nCompleted 90.00% of jobs. Time elapsed: 1.01 s, remaining: 0.11 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSRRRR.\r\nCompleted 95.00% of jobs. Time elapsed: 1.08 s, remaining: 0.06 s. List: FSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSSSSSFSRR.\r\nReporting pool finished after 1.1385 s.\r\nJobs 0, 6, 12, 18, 24, 30, 36 were not finished correctly.\r\n[None, 1, 4, 9, 16, 25, None, 49, 64, 81, 100, 121, None, 169, 196, 225, 256, 289, None, 361, 400, 441, 484, 529, None, 625, 676, 729, 784, 841, None, 961, 1024, 1089, 1156, 1225, None, 1369, 1444, 1521]\r\n```\r\n\r\n## Authors\r\n\r\n- [**Anton Sobinov**](https://github.com/nishbo)\r\n\r\n\r\n##### Keywords\r\npython, multiprocessing, pool, starmap\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A wrapper around multiprocessing.Pool that keeps track of the completion and exceptions.",
    "version": "0.1.4",
    "project_urls": {
        "Homepage": "https://github.com/nishbo/reporting_pool"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62f8b92db299d6889e475575890825415a4e0044d24977c5e012607852e090b2",
                "md5": "bf9f90a7a970e1aa35edb86448cb0c5e",
                "sha256": "99b64ff6826f44074fe81b5074371d0a216b01162664f5ed1100e488149bedce"
            },
            "downloads": -1,
            "filename": "reporting_pool-0.1.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bf9f90a7a970e1aa35edb86448cb0c5e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 6854,
            "upload_time": "2024-09-10T18:54:27",
            "upload_time_iso_8601": "2024-09-10T18:54:27.283486Z",
            "url": "https://files.pythonhosted.org/packages/62/f8/b92db299d6889e475575890825415a4e0044d24977c5e012607852e090b2/reporting_pool-0.1.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f29b6386f2fe8e6a0ec1627fa0f66cd255e6f9be21ee8a45d9c2e1ce31c3fa58",
                "md5": "3f2401ff4bf65b1552aaa9348905fc0e",
                "sha256": "df0da63c683520a0d184d2ef199ed3de6afc272b32a2c6058bd8bb3e96d1d1a4"
            },
            "downloads": -1,
            "filename": "reporting_pool-0.1.4.tar.gz",
            "has_sig": false,
            "md5_digest": "3f2401ff4bf65b1552aaa9348905fc0e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 6350,
            "upload_time": "2024-09-10T18:54:28",
            "upload_time_iso_8601": "2024-09-10T18:54:28.308478Z",
            "url": "https://files.pythonhosted.org/packages/f2/9b/6386f2fe8e6a0ec1627fa0f66cd255e6f9be21ee8a45d9c2e1ce31c3fa58/reporting_pool-0.1.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-10 18:54:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nishbo",
    "github_project": "reporting_pool",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "reporting-pool"
}
        
Elapsed time: 0.42242s