Parallel processing utilities using Pathos mpprocessing library
Project description
twat-mp
(work in progress)
Parallel processing utilities using the Pathos multiprocessing library. This package provides convenient context managers and decorators for parallel processing, with both process-based and thread-based pools.
Features
- Context managers for both process and thread pools:
ProcessPool: For CPU-intensive parallel processingThreadPool: For I/O-bound parallel processing
- Decorators for common parallel mapping operations:
amap: Asynchronous parallel map with automatic result retrievalimap: Lazy parallel map returning an iteratorpmap: Standard parallel map (eager evaluation)
- Automatic CPU core detection for optimal pool sizing
- Clean resource management with context managers
- Full type hints and modern Python features
- Flexible pool configuration with customizable worker count
Installation
pip install twat-mp
Usage
Using Process and Thread Pools
The package provides dedicated context managers for both process and thread pools:
from twat_mp import ProcessPool, ThreadPool
# For CPU-intensive operations
with ProcessPool() as pool:
results = pool.map(lambda x: x * x, range(10))
print(list(results)) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# For I/O-bound operations
with ThreadPool() as pool:
results = pool.map(lambda x: x * 2, range(10))
print(list(results)) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# Custom number of workers
with ProcessPool(nodes=4) as pool:
results = pool.map(lambda x: x * x, range(10))
Using Map Decorators
The package provides three decorators for different mapping strategies:
from twat_mp import amap, imap, pmap
# Standard parallel map (eager evaluation)
@pmap
def square(x: int) -> int:
return x * x
results = list(square(range(10)))
print(results) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Lazy parallel map (returns iterator)
@imap
def cube(x: int) -> int:
return x * x * x
for result in cube(range(5)):
print(result) # Prints results as they become available
# Asynchronous parallel map with automatic result retrieval
@amap
def double(x: int) -> int:
return x * 2
results = list(double(range(10)))
print(results) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Function Composition
Decorators can be composed for complex parallel operations:
from twat_mp import amap
@amap
def compute_intensive(x: int) -> int:
result = x
for _ in range(1000): # Simulate CPU-intensive work
result = (result * x + x) % 10000
return result
@amap
def io_intensive(x: int) -> int:
import time
time.sleep(0.001) # Simulate I/O wait
return x * 2
# Chain parallel operations
results = list(io_intensive(compute_intensive(range(100))))
Dependencies
pathos: For parallel processing functionality
Development
To set up the development environment:
# Install in development mode with test dependencies
uv pip install -e ".[test]"
# Run tests
python -m pytest tests/
# Run benchmarks
python -m pytest tests/test_benchmark.py
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file twat_mp-1.7.0.tar.gz.
File metadata
- Download URL: twat_mp-1.7.0.tar.gz
- Upload date:
- Size: 72.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
918365a4b9db935e5450300e1769904ba83e84610cf2faec3dd41b885961fce0
|
|
| MD5 |
2b351d9a655650db69a583a958f10c68
|
|
| BLAKE2b-256 |
34abb2260e548477a771ffa14295c3431efa86f8edfc3c9ae5fcb01d75d7de5f
|
File details
Details for the file twat_mp-1.7.0-py3-none-any.whl.
File metadata
- Download URL: twat_mp-1.7.0-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6badf250afd48837c7b50d9dcad0b77c57e932872bdb2fa7e13967e29c14f6e6
|
|
| MD5 |
ef6a12986bf677bf7ac191918c437185
|
|
| BLAKE2b-256 |
c06ee5ff954499819a17d6e994c50c0982d64e17b472ca8ec882aeafe7d87be8
|