Metadata-Version: 2.2
Name: opengris-scaler
Version: 2.0.16
Summary: OpenGRIS Scaler Distribution Framework
Author-Email: Citi <opensource@citi.com>
License: Apache 2.0
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Topic :: System :: Distributed Computing
Project-URL: Home, https://github.com/finos/opengris-scaler
Requires-Python: >=3.8
Requires-Dist: argcomplete
Requires-Dist: bidict
Requires-Dist: cloudpickle
Requires-Dist: psutil==7.2.2
Requires-Dist: pyzmq
Requires-Dist: sortedcontainers==2.4.0
Requires-Dist: tblib
Requires-Dist: graphlib-backport; python_version < "3.9"
Requires-Dist: typing-extensions
Requires-Dist: tomli>=2.0; python_version < "3.11"
Provides-Extra: uvloop
Requires-Dist: uvloop; platform_system != "Windows" and extra == "uvloop"
Provides-Extra: gui
Requires-Dist: fastapi>=0.100.0; extra == "gui"
Requires-Dist: uvicorn[standard]>=0.20.0; extra == "gui"
Requires-Dist: websockets>=11.0; extra == "gui"
Provides-Extra: graphblas
Requires-Dist: python-graphblas==2023.7.0; python_version == "3.8" and extra == "graphblas"
Requires-Dist: python-graphblas==2024.2.0; python_version >= "3.9" and python_version < "3.11" and extra == "graphblas"
Requires-Dist: python-graphblas==2025.2.0; python_version >= "3.11" and extra == "graphblas"
Requires-Dist: numpy==1.24.4; python_version == "3.8" and extra == "graphblas"
Requires-Dist: numpy==2.0.2; python_version == "3.9" and extra == "graphblas"
Requires-Dist: numpy==2.2.6; python_version >= "3.10" and extra == "graphblas"
Provides-Extra: aws
Requires-Dist: boto3; extra == "aws"
Requires-Dist: botocore[crt]; extra == "aws"
Provides-Extra: orb
Requires-Dist: orb-py~=1.5.1; python_version >= "3.10" and extra == "orb"
Requires-Dist: boto3; extra == "orb"
Requires-Dist: packaging; extra == "orb"
Requires-Dist: botocore[crt]; extra == "orb"
Provides-Extra: all
Requires-Dist: opengris-scaler[aws]; extra == "all"
Requires-Dist: opengris-scaler[gui]; extra == "all"
Requires-Dist: opengris-scaler[orb]; extra == "all"
Requires-Dist: opengris-scaler[uvloop]; extra == "all"
Description-Content-Type: text/markdown

<div align="center">
  <a href="https://github.com/finos/opengris-scaler">
    <img src="https://github.com/finos/branding/blob/master/project-logos/active-project-logos/OpenGRIS/Scaler/2025_OpenGRIS_Scaler.svg" alt="OpenGRIS Scaler" width="180" height="80">
  </a>

  <p><strong>Efficient, lightweight, and reliable distributed computation.</strong></p>

  <p>
    <a href="https://community.finos.org/docs/governance/Software-Projects/stages/incubating"><img src="https://cdn.jsdelivr.net/gh/finos/contrib-toolbox@master/images/badge-incubating.svg" alt="FINOS Incubating"></a>
    <a href="https://finos.github.io/opengris-scaler/"><img src="https://img.shields.io/badge/Documentation-0f1632" alt="Documentation"></a>
    <a href="./LICENSE"><img src="https://img.shields.io/github/license/finos/opengris-scaler?label=license&colorA=0f1632&colorB=255be3" alt="License"></a>
    <a href="https://pypi.org/project/opengris-scaler"><img src="https://img.shields.io/pypi/v/opengris-scaler?colorA=0f1632&colorB=255be3" alt="PyPI"></a>
    <img src="https://api.securityscorecards.dev/projects/github.com/finos/opengris-scaler/badge" alt="OpenSSF Scorecard">
  </p>
</div>

> **Documentation:** https://finos.github.io/opengris-scaler/
>
> Start there for installation options, command reference, worker manager guides, scaling policies, and examples.

## What Is Scaler?

OpenGRIS Scaler is a distributed computing framework for running Python tasks across local machines or remote infrastructure.

It provides:

- A Python client API similar to `multiprocessing` patterns such as `submit()`, `map()`, and `starmap()`.
- A centralized scheduler that dispatches work and balances load across workers.
- Worker managers for local execution and cloud-backed capacity.
- Support for graph/DAG execution, monitoring, and task recovery.

## Architecture

![Scaler architecture](docs/source/tutorials/images/architecture.svg)

- Clients submit tasks to a scheduler.
- The scheduler tracks state, applies scaling/allocation policies, and dispatches work.
- Worker managers provision workers locally or on external infrastructure.
- Workers execute tasks and return results.
- An object storage service stores task inputs and outputs used by the cluster.

## Local Quickstart

Install the package:

```bash
pip install opengris-scaler
```

Create `config.toml`:

```toml
[object_storage_server]
bind_address = "tcp://127.0.0.1:8517"

[scheduler]
bind_address = "tcp://127.0.0.1:8516"
object_storage_address = "tcp://127.0.0.1:8517"

[[worker_manager]]
type = "baremetal_native"
scheduler_address = "tcp://127.0.0.1:8516"
worker_manager_id = "wm-native"
```

Start a fully local stack:

```bash
scaler config.toml
```

Submit tasks from Python:

```python
from scaler import Client


def square(value: int) -> int:
    return value * value


with Client(address="tcp://127.0.0.1:8516") as client:
    results = client.map(square, range(10))

print(results)
```

## Learn More

- Docs home: https://finos.github.io/opengris-scaler/
- Quickstart: https://finos.github.io/opengris-scaler/tutorials/quickstart.html
- Overview: https://finos.github.io/opengris-scaler/tutorials/overview.html
- Commands: https://finos.github.io/opengris-scaler/tutorials/commands.html
