Skip to main content

Lazy object proxy interface for distributed stores.

Project description

ProxyStore

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.

Extended features are available in the proxystore-ex 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

DOI

If you use ProxyStore or any of this code in your work, please cite our preprint.

@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.6.0.tar.gz (365.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.6.0-py3-none-any.whl (103.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: proxystore-0.6.0.tar.gz
  • Upload date:
  • Size: 365.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for proxystore-0.6.0.tar.gz
Algorithm Hash digest
SHA256 11aec13496d2affbfad17f764a468d5b39fb643d37be8ae4960411e79bb86ca1
MD5 99bafce5a5f6ca94c943a1764c803643
BLAKE2b-256 1882f39af1e9f23aefd2db55a45039016730fe427baa2cff5171e1515b37c1e3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: proxystore-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 103.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for proxystore-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f9dd82030a70817d677ed645db8ab337ec1b1df02a236b4eccb30b1b83831c13
MD5 01164e4e9b10ec648b1cd21967e0679d
BLAKE2b-256 4e28e9bb75ceffa2906928f7801ec1ddced048f1cf0c3c2b8a89424ff3457583

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