Skip to main content

Run multiple functions in parallel and collect results with the simplest possible API

Project description

philiprehberger-run-parallel

Tests PyPI version Last updated

Run multiple functions in parallel and collect results with the simplest possible API.

Installation

pip install philiprehberger-run-parallel

Usage

Run functions in parallel

from philiprehberger_run_parallel import parallel

results = parallel(
    lambda: 1 + 1,
    lambda: 2 + 2,
    lambda: 3 + 3,
)
# [2, 4, 6]

Pass arguments with tuples

from philiprehberger_run_parallel import parallel
import time

results = parallel(
    (time.sleep, 0.1),
    (pow, 2, 10),
)
# [None, 1024]

Track progress

from philiprehberger_run_parallel import parallel

def on_progress(completed, total):
    print(f"{completed}/{total} done")

results = parallel(
    lambda: 1 + 1,
    lambda: 2 + 2,
    lambda: 3 + 3,
    on_progress=on_progress,
)
# 1/3 done
# 2/3 done
# 3/3 done

Process-based parallelism

from philiprehberger_run_parallel import parallel_process

def cpu_work():
    return sum(range(10_000_000))

results = parallel_process([cpu_work, cpu_work, cpu_work], max_workers=3)

Map a function over items

from philiprehberger_run_parallel import parallel_map

results = parallel_map(str.upper, ["hello", "world"])
# ["HELLO", "WORLD"]

# Control the number of workers
results = parallel_map(fetch_url, urls, workers=8, timeout=30)

Async parallel

import asyncio
from philiprehberger_run_parallel import aparallel

async def main():
    results = await aparallel(
        fetch("https://example.com/a"),
        fetch("https://example.com/b"),
    )
    print(results)

asyncio.run(main())

Error handling

from philiprehberger_run_parallel import parallel, ParallelError

try:
    results = parallel(
        lambda: 1,
        lambda: 1 / 0,
    )
except ParallelError as e:
    print(e.errors)   # [None, ZeroDivisionError(...)]
    print(e.results)  # [1, None]

API

Function / Class Description
parallel(*tasks, timeout=None, on_progress=None) -> list Run callables or (fn, *args) tuples via ThreadPoolExecutor, return results in order. Optional progress callback (completed, total).
parallel_process(fns, max_workers=None) -> list Run callables via ProcessPoolExecutor for CPU-bound work, return results in order.
parallel_map(fn, items, *, workers=0, timeout=None) -> list Apply a function to each item in parallel, return results in order.
aparallel(*coros) -> list Run async coroutines concurrently via asyncio.gather, return results in order.
ParallelError Raised when any task fails. Has .errors (list of exceptions/None) and .results (list of values/None).

Development

pip install -e .
python -m pytest tests/ -v

Support

If you find this project useful:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

philiprehberger_run_parallel-0.2.1.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

philiprehberger_run_parallel-0.2.1-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_run_parallel-0.2.1.tar.gz.

File metadata

File hashes

Hashes for philiprehberger_run_parallel-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8403d22ab2323b1debe7a8da588a99bf63e8cb7661df7957a36b16dc0f65279b
MD5 5076caa02cb59336cd8cbd567a94a802
BLAKE2b-256 d67fb70f74dcdec1ab8ef8bcc1c918a9bf2ca3231b09fa1425b950ea6342ab6e

See more details on using hashes here.

File details

Details for the file philiprehberger_run_parallel-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_run_parallel-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 48163fe58368f9e362b7775739ddae7037db999fc8677a94a4603e8df7e864a9
MD5 8681c6757628137a9b4cafdfa43114db
BLAKE2b-256 0625ab160a4d453a95adf224c2dc052dd14fbb9cbf19bc8acb06174656f9a849

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page