multiprocessing.shared_memory in Python#

Vineyard offers a shared memory interface through SharedMemory and ShareableList classes, ensuring compatibility with Python’s multiprocessing.shared_memory.

Utilize the shared memory interface as demonstrated below:

>>> from vineyard import shared_memory
>>> value = shared_memory.ShareableList(client, [b"a", "bb", 1234, 56.78, True])
>>> value
ShareableList([b'a', 'bb', 1234, 56.78, True], name='o8000000119aa10c0')
>>> value[4] = False
>>> value
ShareableList([b'a', 'bb', 1234, 56.78, False], name='o8000000119aa10c0')

Caution

Please be aware that the semantics of Vineyard’s shared_memory differ slightly from those of Python’s multiprocessing module’s shared_memory. In Vineyard, shared memory cannot be modified once it becomes visible to other clients.

We have added a freeze method to make such transformation happen:

>>> value.freeze()

After being frozen, the shared memory (aka. the ShareableList in this case) is available for other clients:

>>> value1 = shared_memory.ShareableList(client, name=value.shm.name)
>>> value1
ShareableList([b'a', 'bb', 1234, 56.78, False], name='o8000000119aa10c0')

For more details, see Shared memory.