ultima


Nameultima JSON
Version 1.2.0 PyPI version JSON
download
home_pagehttps://github.com/epic-framework/ultima
SummaryIntuitive parallel map calls for Python
upload_time2025-01-18 12:10:37
maintainerNone
docs_urlNone
authorYonatan Perry
requires_python<4.0,>=3.10
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Ultima - intuitive parallel `map()` for Python
[![Ultima CI](https://github.com/epic-framework/ultima/actions/workflows/ci.yml/badge.svg)](https://github.com/epic-framework/ultima/actions/workflows/ci.yml)

## What is it?

**ultima** is a Python package that provides a simple yet powerful interface to do `map()` in parallel.
It uses `concurrent.futures` as its execution backend and can run tasks in either threads or sub-processes.
It is designed to squeeze maximum performance (let those CPUs burn 🔥) with the same simple interface.

## Usage examples:

Run a heavy function in sub-processes:

```python
from ultima import Workforce

inputs = open("input_data.txt")

with Workforce() as wf:
    for result in wf.map(cpu_intensive_function, inputs):
        ...
```

An equivalent one-liner:

```python
from ultima import ultimap

for result in ultimap(cpu_intensive_function, inputs):
    ...
```

The default backend is multiprocessing, but you can easily use threads instead:

```python
from ultima import ultimap

for result in ultimap(io_bound_function, inputs, backend='threading', n_workers=64):
    ...
```

To chain an IO-intensive task with a CPU-intensive task:

```python
from ultima import ultimap

def io_intensive(url):
    import requests
    return requests.get(url).text

def cpu_intensive(page):
    import hashlib
    return hashlib.sha1(page.encode()).hexdigest()

urls = open("urls.txt")
webpages = ultimap(io_intensive, urls, backend='threading', n_workers=64)
hashes = ultimap(cpu_intensive, webpages, backend='multiprocessing')
print(len(set(hashes)))
```

You can also map a function recursively:

```python
from ultima import ultimap

def visit(graph, node, add_input):
    for child_node in graph.get_children(node):
        add_input(graph, child_node)
    return f"visited {node}"

print(list(ultimap(visit, [(graph, graph.root)], recursive=True)))
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/epic-framework/ultima",
    "name": "ultima",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "Yonatan Perry",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/77/52/ac134698587cd7e638416f3ee9463088c4ce093375cfc764edf7cec762a1/ultima-1.2.0.tar.gz",
    "platform": null,
    "description": "# Ultima - intuitive parallel `map()` for Python\n[![Ultima CI](https://github.com/epic-framework/ultima/actions/workflows/ci.yml/badge.svg)](https://github.com/epic-framework/ultima/actions/workflows/ci.yml)\n\n## What is it?\n\n**ultima** is a Python package that provides a simple yet powerful interface to do `map()` in parallel.\nIt uses `concurrent.futures` as its execution backend and can run tasks in either threads or sub-processes.\nIt is designed to squeeze maximum performance (let those CPUs burn \ud83d\udd25) with the same simple interface.\n\n## Usage examples:\n\nRun a heavy function in sub-processes:\n\n```python\nfrom ultima import Workforce\n\ninputs = open(\"input_data.txt\")\n\nwith Workforce() as wf:\n    for result in wf.map(cpu_intensive_function, inputs):\n        ...\n```\n\nAn equivalent one-liner:\n\n```python\nfrom ultima import ultimap\n\nfor result in ultimap(cpu_intensive_function, inputs):\n    ...\n```\n\nThe default backend is multiprocessing, but you can easily use threads instead:\n\n```python\nfrom ultima import ultimap\n\nfor result in ultimap(io_bound_function, inputs, backend='threading', n_workers=64):\n    ...\n```\n\nTo chain an IO-intensive task with a CPU-intensive task:\n\n```python\nfrom ultima import ultimap\n\ndef io_intensive(url):\n    import requests\n    return requests.get(url).text\n\ndef cpu_intensive(page):\n    import hashlib\n    return hashlib.sha1(page.encode()).hexdigest()\n\nurls = open(\"urls.txt\")\nwebpages = ultimap(io_intensive, urls, backend='threading', n_workers=64)\nhashes = ultimap(cpu_intensive, webpages, backend='multiprocessing')\nprint(len(set(hashes)))\n```\n\nYou can also map a function recursively:\n\n```python\nfrom ultima import ultimap\n\ndef visit(graph, node, add_input):\n    for child_node in graph.get_children(node):\n        add_input(graph, child_node)\n    return f\"visited {node}\"\n\nprint(list(ultimap(visit, [(graph, graph.root)], recursive=True)))\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Intuitive parallel map calls for Python",
    "version": "1.2.0",
    "project_urls": {
        "Homepage": "https://github.com/epic-framework/ultima",
        "Repository": "https://github.com/epic-framework/ultima"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7752ac134698587cd7e638416f3ee9463088c4ce093375cfc764edf7cec762a1",
                "md5": "3f436f2a7bf643d1acc6d6eae0918ab4",
                "sha256": "2b03b2f65c6f0d86e421eed79217f60928367bc34046487ec676f7539c8def08"
            },
            "downloads": -1,
            "filename": "ultima-1.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3f436f2a7bf643d1acc6d6eae0918ab4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 19089,
            "upload_time": "2025-01-18T12:10:37",
            "upload_time_iso_8601": "2025-01-18T12:10:37.942380Z",
            "url": "https://files.pythonhosted.org/packages/77/52/ac134698587cd7e638416f3ee9463088c4ce093375cfc764edf7cec762a1/ultima-1.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-18 12:10:37",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "epic-framework",
    "github_project": "ultima",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ultima"
}
        
Elapsed time: 1.63332s