Skip to main content

Advanced data flow management for distributed Python applications

Project description

ProxyStore

PyPI - Version PyPI - Python Version GitHub License DOI

docs tests pre-commit.ci status

ProxyStore facilitates efficient data flow management in distributed Python applications, such as dynamic task-based workflows or serverless and edge applications.

The transparent object proxy, the core building block within ProxyStore, acts like a wide-area reference that can be cheaply communicated. Unlike traditional references that are only valid within the virtual address space of a single process, the proxy references an object in remote storage and can be implicitly dereferenced in arbitrary processes—even on remote machines. The proxy is transparent in that it implicitly dereferences its target object when used—referred to a just-in-time resolution—and afterwards forwards all operations on itself to the cached target object.

This paradigm results in the best of both pass-by-reference and pass-by-value semantics, improves performance and portability by reducing transfer overheads through intermediaries, and abstracts low-level communication methods which reduces code complexity. A proxy contains within itself all the information and logic necessary to resolve the target object. This self-contained nature means a proxy consumer need not be aware of the low-level communication mechanisms used by the proxy; rather, this is unilaterally determined by the producer of the proxy.

ProxyStore supports a diverse set of programming patterns built on the proxy paradigm:

ProxyStore can leverage many popular mediated data transfer and storage systems: DAOS, Globus Transfer, Kafka, KeyDB, and Redis. Custom communication methods built on Mochi, UCX, WebRTC, and ZeroMQ are provided for high-performance and peer-to-peer applications.

Read more about ProxyStore's concepts here. Complete documentation for ProxyStore is available at docs.proxystore.dev.

Installation

The base ProxyStore package can be installed with pip.

pip install proxystore

Leveraging third-party libraries may require dependencies not installed by default but can be enabled via extras installation options (e.g., endpoints, kafka, or redis). All additional dependencies can be installed with:

pip install proxystore[all]

This will also install the proxystore-ex package which contains extensions and experimental features. The extensions package can also be installed with pip using proxystore[extensions] or proxystore-ex.

See the Installation guide for more information about the available extras installation options. See the Contributing guide to get started for local development.

Example

Creating proxies of objects only requires a few lines of code.

from proxystore.connectors.local import LocalConnector
from proxystore.proxy import Proxy
from proxystore.store import Store

def process(x: dict[str, str]) -> None:
    # x is transparently resolved from the store when first
    # used by the function. After which the proxy behaves as
    # target object (the dict) for the rest of its existence.
    assert isinstance(x, dict)
    assert x['hello'] == 'world'

with Store('example', connector=LocalConnector(), register=True) as store:
    # Store the object via a connector interface (here, a thread local
    # store). The returned proxy acts like a reference to the object.
    x = {'hello': 'world'}
    proxy = store.proxy(x)
    assert isinstance(proxy, Proxy)

    # Invoking a function with proxy works without function changes.
    process(proxy)

Check out the Get Started guide to learn more!

Citation

DOI

If you use ProxyStore or any of this code in your work, please cite our ProxyStore (SC '23) and Proxy Patterns (TPDS) papers.

@inproceedings{pauloski2023proxystore,
    title = {Accelerating {C}ommunications in {F}ederated {A}pplications with {T}ransparent {O}bject {P}roxies},
    author = {Pauloski, J. Gregory and Hayot-Sasson, Valerie and Ward, Logan and Hudson, Nathaniel and Sabino, Charlie and Baughman, Matt and Chard, Kyle and Foster, Ian},
    address = {New York, NY, USA},
    articleno = {59},
    booktitle = {Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis},
    doi = {10.1145/3581784.3607047},
    isbn = {9798400701092},
    location = {Denver, CO, USA},
    numpages = {15},
    publisher = {Association for Computing Machinery},
    series = {SC '23},
    url = {https://doi.org/10.1145/3581784.3607047},
    year = {2023}
}

@article{pauloski2024proxystore,
    title = {Object {P}roxy {P}atterns for {A}ccelerating {D}istributed {A}pplications},
    author = {Pauloski, J. Gregory and Hayot-Sasson, Valerie and Ward, Logan and Brace, Alexander and Bauer, André and Chard, Kyle and Foster, Ian},
    doi = {10.1109/TPDS.2024.3511347},
    journal = {IEEE Transactions on Parallel and Distributed Systems},
    number = {},
    pages = {1-13},
    volume = {},
    year = {2024}
}

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

proxystore-0.8.3.tar.gz (372.0 kB view details)

Uploaded Source

Built Distribution

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

proxystore-0.8.3-py3-none-any.whl (165.8 kB view details)

Uploaded Python 3

File details

Details for the file proxystore-0.8.3.tar.gz.

File metadata

  • Download URL: proxystore-0.8.3.tar.gz
  • Upload date:
  • Size: 372.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proxystore-0.8.3.tar.gz
Algorithm Hash digest
SHA256 7a71de1abaefd04425f9614a32a6527de48f2c65bba999996c7c1db582ec7b48
MD5 56842717946552a4362793b1dfb01ec3
BLAKE2b-256 4e6f1c1e2b74f6f4bb3ab5fc911bf573ebde5f7fddfbe0cb3941796b7c6057dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxystore-0.8.3.tar.gz:

Publisher: publish.yml on proxystore/proxystore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file proxystore-0.8.3-py3-none-any.whl.

File metadata

  • Download URL: proxystore-0.8.3-py3-none-any.whl
  • Upload date:
  • Size: 165.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proxystore-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7c7bf44501c0e1813e44c86f0880253f4c4185497409a7da3ca7cd0443420b14
MD5 d8c297d1623520ee03b107312bfcf5d7
BLAKE2b-256 602da6bd3ce0533b60de29a9bd0321d33b17ad016f95435eab2dafee5a0a64f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxystore-0.8.3-py3-none-any.whl:

Publisher: publish.yml on proxystore/proxystore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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