forked from goodboy/tractor
Mod define `_USE_POSIX`, add a of of todos
parent
a9fc4c1b91
commit
e0bf964ff0
|
@ -30,15 +30,19 @@ from multiprocessing import shared_memory as shm
|
||||||
from multiprocessing.shared_memory import (
|
from multiprocessing.shared_memory import (
|
||||||
SharedMemory,
|
SharedMemory,
|
||||||
ShareableList,
|
ShareableList,
|
||||||
# _USE_POSIX, # type: ignore
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if getattr(shm, '_USE_POSIX', False):
|
|
||||||
from _posixshmem import shm_unlink
|
|
||||||
|
|
||||||
from msgspec import Struct
|
from msgspec import Struct
|
||||||
import tractor
|
import tractor
|
||||||
|
|
||||||
|
from .log import get_logger
|
||||||
|
|
||||||
|
|
||||||
|
_USE_POSIX = getattr(shm, '_USE_POSIX', False)
|
||||||
|
if _USE_POSIX:
|
||||||
|
from _posixshmem import shm_unlink
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from numpy.lib import recfunctions as rfn
|
from numpy.lib import recfunctions as rfn
|
||||||
|
@ -46,8 +50,6 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
from .log import get_logger
|
|
||||||
|
|
||||||
|
|
||||||
log = get_logger(__name__)
|
log = get_logger(__name__)
|
||||||
|
|
||||||
|
@ -161,6 +163,8 @@ class NDToken(Struct, frozen=True):
|
||||||
# _known_tokens = tractor.ContextStack('_known_tokens', )
|
# _known_tokens = tractor.ContextStack('_known_tokens', )
|
||||||
# _known_tokens = trio.RunVar('shms', {})
|
# _known_tokens = trio.RunVar('shms', {})
|
||||||
|
|
||||||
|
# TODO: this should maybe be provided via
|
||||||
|
# a `.trionics.maybe_open_context()` wrapper factory?
|
||||||
# process-local store of keys to tokens
|
# process-local store of keys to tokens
|
||||||
_known_tokens: dict[str, NDToken] = {}
|
_known_tokens: dict[str, NDToken] = {}
|
||||||
|
|
||||||
|
@ -712,8 +716,12 @@ def maybe_open_shm_ndarray(
|
||||||
|
|
||||||
class ShmList(ShareableList):
|
class ShmList(ShareableList):
|
||||||
'''
|
'''
|
||||||
Carbon copy of ``.shared_memory.ShareableList`` but add a
|
Carbon copy of ``.shared_memory.ShareableList`` with a few
|
||||||
readonly state instance var.
|
enhancements:
|
||||||
|
|
||||||
|
- readonly mode via instance var flag
|
||||||
|
- ``.__getitem__()`` accepts ``slice`` inputs
|
||||||
|
- exposes the underlying buffer "name" as a ``.key: str``
|
||||||
|
|
||||||
'''
|
'''
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -752,11 +760,22 @@ class ShmList(ShareableList):
|
||||||
self,
|
self,
|
||||||
indexish,
|
indexish,
|
||||||
) -> list:
|
) -> list:
|
||||||
|
|
||||||
|
# NOTE: this is a non-writeable view (copy?) of the buffer
|
||||||
|
# in a new list instance.
|
||||||
if isinstance(indexish, slice):
|
if isinstance(indexish, slice):
|
||||||
return list(self)[indexish]
|
return list(self)[indexish]
|
||||||
|
|
||||||
return super().__getitem__(indexish)
|
return super().__getitem__(indexish)
|
||||||
|
|
||||||
|
# TODO: should we offer a `.array` and `.push()` equivalent
|
||||||
|
# to the `ShmArray`?
|
||||||
|
# currently we have the following limitations:
|
||||||
|
# - can't write slices of input using traditional slice-assign
|
||||||
|
# syntax due to the ``ShareableList.__setitem__()`` implementation.
|
||||||
|
# - ``list(shmlist)`` returns a non-mutable copy instead of
|
||||||
|
# a writeable view which would be handier numpy-style ops.
|
||||||
|
|
||||||
|
|
||||||
def open_shm_list(
|
def open_shm_list(
|
||||||
key: str,
|
key: str,
|
||||||
|
|
Loading…
Reference in New Issue