# Ultima - intuitive parallel `map()` for Python
[](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[](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"
}