From 2ac19b2e962c015e052e552701e182b5bb591789 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Tue, 18 Oct 2022 11:01:02 -0400 Subject: [PATCH] Add `ShmList` slice support in `.__getitem__()` --- tractor/_shm.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tractor/_shm.py b/tractor/_shm.py index 3f415c5..c26c991 100644 --- a/tractor/_shm.py +++ b/tractor/_shm.py @@ -26,20 +26,26 @@ from __future__ import annotations from sys import byteorder import time from typing import Optional +from multiprocessing import shared_memory as shm from multiprocessing.shared_memory import ( SharedMemory, ShareableList, - _USE_POSIX, # type: ignore + # _USE_POSIX, # type: ignore ) -if _USE_POSIX: +if getattr(shm, '_USE_POSIX', False): from _posixshmem import shm_unlink from msgspec import Struct -import numpy as np -from numpy.lib import recfunctions as rfn import tractor +try: + import numpy as np + from numpy.lib import recfunctions as rfn + import nptyping +except ImportError: + pass + from .log import get_logger @@ -742,6 +748,15 @@ class ShmList(ShareableList): return super().__setitem__(position, value) + def __getitem__( + self, + indexish, + ) -> list: + if isinstance(indexish, slice): + return list(self)[indexish] + + return super().__getitem__(indexish) + def open_shm_list( key: str, @@ -774,7 +789,11 @@ def open_shm_list( def attach_shm_list( key: str, + readonly: bool = False, ) -> ShmList: - return ShmList(name=key) + return ShmList( + name=key, + readonly=readonly, + )