Skip to main content

Zero-copy shared memory IPC library for building complex streaming data pipelines capable of processing large datasets

Project description

MomentumX


MomentumX is a zero-copy shared memory IPC library for building complex streaming data pipelines capable of processing large datasets using Python.


Key Features:

  • High-Throughput, Low Latency
  • Supports streaming and synchronous modes for use within a wide variety of use cases.
  • Bring your own encoding, or use raw binary data.
  • Small footprint with zero dependencies.
  • Sane data protections to ensure reliability of data in a cooperative computing environment.
  • Pairs with other high-performance libraries, such as numpy and scipy, to support parallel processing of memory-intensive scientific data.
  • Works on most modern versions of Linux using shared memory (via /dev/shm).
  • Seamlessly integrates into a Docker environment with minimal configuration, and readily enables lightweight container-to-container data sharing.

Examples:

Below are some simplified use cases for common MomentumX workflows. Consult the examples in the examples/ directory for additional details and implementation guidance.

Streaming Mode (e.g. lossy)

# Producer Process
import momentumx as mx

# Create a stream with a total capacity of 10MB
stream = mx.Producer('my_stream', buffer_size=int(1e6), buffer_count=10, sync=False)

# Write the series 0-9 repeatedly to a buffer 1000 times
for i in range(0, 1000):
    buffer = stream.next_to_send()
    buffer.write(f'{i % 10}'.encode('utf8')) # Note: writing to buffer via [<index>] and [<start_index>:<stop_index>] is also possible
    buffer.send() # Note: call with .send(<num bytes>) if you want to explicitly control the data_size parameter, otherwise internal cursor will be used
# Consumer Process(es)
import momentumx as mx

stream = mx.Consumer('my_stream')

while stream.is_alive:
    # Receive from the stream as long as the stream is available 
    buffer = stream.receive()
    print(buffer[:buffer.data_size])

Syncronous Mode (e.g. lossless)

# Producer Process
import momentumx as mx
import threading
import signal

cancel_event = threading.Event()
signal.signal(signal.SIGINT, (lambda _sig, _frm: cancel_event.set()))

# Create a stream with a total capacity of 10MB
stream = mx.Producer('my_stream', buffer_size=int(1e6), buffer_count=10, sync=True) # NOTE: sync set to True

min_subscribers = 1

while stream.subscriber_count < min_subscribers:
    print("waiting for subscriber(s)")
    if cancel_event.wait(0.5):
        break

print("All expected subscribers are ready")

# Write the series 0-999 to a consumer 
for n in range(0, 1000):
    if stream.subscriber_count == 0:
        cancel_event.wait(0.5)

    # Note: sending strings directly is possible via the send_string call
    elif stream.send_string(str(n)):
        print(f"Sent: {n}")
# Consumer Process(es)
import momentumx as mx

stream = mx.Consumer('my_stream')

while stream.is_alive:
    # Note: receiving strings is possible as well via the receive_string call
    print(f"Received: {stream.receive_string()}")

Numpy Integration

import momentumx as mx
import numpy as np

# Create a stream
stream = mx.Consumer('numpy_stream')

# Receive the next buffer (or if a producer, obtain the next_to_send buffer)
buffer = stream.receive()

# Create a numpy array directly from the memory without any copying
np_buff = np.frombuffer(buffer, dtype=uint8)

Isolated Contexts

MomentumX allows for the usage of streams outside of /dev/shm (the default location). Pass the context kwarg pointing to a directory on the filesystem for both the Producer and all Consumer instances to create isolated contexts.

This option is useful if access to /dev/shm is unsuitable.

import momentumx as mx

# Create a producer attached to the context path /my/path
stream = mx.Producer('my_stream', ..., context='/my/path/')
...

# Create Consumer elsewhere attached to the same context of /my/path
stream = mx.Consumer('my_stream', context='/my/path/')

License

Captivation Software, LLC offers MomentumX under an Unlimited Use License to the United States Government, with all other parties subject to the GPL-3.0 License.

Inquiries / Requests

All inquiries and requests may be sent to opensource@captivation.us.

Copyright © 2022-2023 - Captivation Software, LLC.

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

MomentumX-2.4.1.tar.gz (47.2 kB view details)

Uploaded Source

Built Distributions

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

MomentumX-2.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (202.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

MomentumX-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (202.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

MomentumX-2.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (202.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

MomentumX-2.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (202.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

MomentumX-2.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (203.8 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

MomentumX-2.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (203.5 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

Details for the file MomentumX-2.4.1.tar.gz.

File metadata

  • Download URL: MomentumX-2.4.1.tar.gz
  • Upload date:
  • Size: 47.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for MomentumX-2.4.1.tar.gz
Algorithm Hash digest
SHA256 86d9a24c9fb6df1086e44f925739b1c787e327548fd2ace2f0e859b5f2fc9e2f
MD5 0ef96d883fc34b4f6bd4fca56a5e5f7f
BLAKE2b-256 19716e2377f814cc88bed247667cb22966f794b8c9b2461bd7c065f59e10b14a

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87438ab5dccce868a5bfede5fda35e727de75a10385f0f2e96a8ed65c18f7fde
MD5 fc5ce69727c41589ec0488307c4407f9
BLAKE2b-256 c067b1ba313a1bb62199fa14ba8f615a50b2e7f2c5b95c4880105910d4b633d2

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 529d1982a0606a92d515d9e61b21234391fe4827309b73f246418e899c5237a6
MD5 39b50e8c6d40b13e2b345aeb1c1bf160
BLAKE2b-256 c2cb44ce5c244c1cb182b662048fb373e6d40df63a9a78faea5ca3e31c7bddf6

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3a9296fbb77e46b0c2c840f9b2055bf5d044333cda4b5017a0ddb2c9908f3672
MD5 1cb25a381dc76bdbd35bdb5fa31b5c6e
BLAKE2b-256 5b5bcfadbfa5cfc62d97d8a0846f374bb8befa8adf49039d0eb18f1116500d5c

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 200cec8ab27f0c10fa0ab7c5c84f4b4aed9485e4f79c2dc1ddc6837f8714e3a6
MD5 d14c1d55606851d5d1e65c2f7f3e3375
BLAKE2b-256 c1460d9e23424d8d5012eb8937c9a34217e47748ef0efc68fd7b3b3e12e5ddc0

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 adcee89b9e1dd6d65a68063d3b77165e41e31f89c67771ed66d5cffe5c0f8160
MD5 d76c23cc8242db6036ab626f6f966310
BLAKE2b-256 670d2e5a29e3220068b68e5680a6672fcf81b6de4700237179e384b4ea2d802d

See more details on using hashes here.

File details

Details for the file MomentumX-2.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for MomentumX-2.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f740a9a9d5c4aa527a9aad179e3d4fe4d23603a75a17bd0e921d539b91da7673
MD5 641b3d9773c77091c963d0e32fc4de2a
BLAKE2b-256 5b7f3f05f3873a3d9575f8f0c147b18a3aa06977eed1709c6bb08aa5d81a88cd

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