Skip to main content

Lazy object proxy interface for distributed stores.

Project description

ProxyStore

DOI docs tests pre-commit.ci status

ProxyStore provides pass-by-reference semantics for distributed Python applications through transparent object proxies. Moving data via proxies (1) decouples control flow from data flow, (2) enables producers to unilaterally (i.e., without the agreement of or awareness by the consumer) choose the best storage and communication channel for the data, and (3) perform just-in-time data movement directly between producer and consumer.

ProxyStore's goals are to:

  • Improve productivity. ProxyStore enables easy decoupling of communication from the rest of the code, allowing developers to focus on functionality and performance.
  • Improve compatibility. Consumers of data can be agnostic to the communication method because object proxies handle the communication behind the scenes.
  • Improve performance. Transport methods and object stores can be changed at runtime to optimal choices for the given data without the consumers being aware of the change.

ProxyStore provides support for many third-party mediated communication methods out-of-the-box including Globus Transfer, KeyDB, and Redis. Custom communication methods built on Mochi, UCX, WebRTC, and ZeroMQ are provided for high-performance and multi-site applications.

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

Installation

$ pip install proxystore
$ pip install proxystore[all]

See the Installation guide for more information about the available extra install options. For local development, see the Contributing guide.

Additional features are available in the proxystore-extensions package.

Example

Getting started with ProxyStore requires a few lines of code.

from proxystore.connectors.redis import RedisConnector
from proxystore.proxy import Proxy
from proxystore.store import register_store
from proxystore.store import Store

store = Store('my-store', RedisConnector('localhost', 6379))

# Store the object and get a proxy. The proxy acts
# like a reference to the object.
data = MyDataType(...)
proxy = store.proxy(data)
assert isinstance(proxy, Proxy)

def my_function(x: MyDataType) -> ...:
    # x is resolved my-store on first use transparently to the
    # function. Then x behaves as an instance of MyDataType.
    assert isinstance(x, MyDataType)

my_function(proxy)  # Succeeds

Check out the Get Started guide to learn more!

Citation

If you use ProxyStore or any of this code in your work, please cite the following paper.

@misc{pauloski2023proxystore,
    author = {J. Gregory Pauloski and Valerie Hayot-Sasson and Logan Ward and Nathaniel Hudson and Charlie Sabino and Matt Baughman and Kyle Chard and Ian Foster},
    title = {{Accelerating Communications in Federated Applications with Transparent Object Proxies}},
    archiveprefix = {arXiv},
    eprint = {2305.09593},
    primaryclass = {cs.DC},
    year = {2023}
}

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.5.2.tar.gz (358.8 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.5.2-py3-none-any.whl (110.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: proxystore-0.5.2.tar.gz
  • Upload date:
  • Size: 358.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for proxystore-0.5.2.tar.gz
Algorithm Hash digest
SHA256 83a542d1c0785d27b7b57657c5e09753eed8ba08f71d67504f571919389ebbb4
MD5 adf447b2cfb739dc4af3f255ec32e22f
BLAKE2b-256 17ceb882770050dd6cf8c5bc213eda0766df5f3472ce2bd72ca14b30d33cefff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: proxystore-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 110.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for proxystore-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5d11d34dd72416cd0cfd5b8d50779469b08abcfa8840c0680c7428c7a4bc511a
MD5 914ad60d23aa5c99d160ee71709fd08d
BLAKE2b-256 0958ff3c6d4ce9961b30c6c3c359f3c3b8f1f8982966a7b1142386b4bb0dd846

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