Add support for no `._first.value` update shm prepends
parent
8219307bf5
commit
09431aad85
|
@ -40,10 +40,11 @@ log = get_logger(__name__)
|
||||||
|
|
||||||
# how much is probably dependent on lifestyle
|
# how much is probably dependent on lifestyle
|
||||||
_secs_in_day = int(60 * 60 * 24)
|
_secs_in_day = int(60 * 60 * 24)
|
||||||
# we try for 3 times but only on a run-every-other-day kinda week.
|
# we try for a buncha times, but only on a run-every-other-day kinda week.
|
||||||
_default_size = 20 * _secs_in_day
|
_days_worth = 16
|
||||||
|
_default_size = _days_worth * _secs_in_day
|
||||||
# where to start the new data append index
|
# where to start the new data append index
|
||||||
_rt_buffer_start = int(9*_secs_in_day)
|
_rt_buffer_start = int((_days_worth - 1) * _secs_in_day)
|
||||||
|
|
||||||
|
|
||||||
def cuckoff_mantracker():
|
def cuckoff_mantracker():
|
||||||
|
@ -61,13 +62,12 @@ def cuckoff_mantracker():
|
||||||
def ensure_running(self):
|
def ensure_running(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# "know your land and know your prey"
|
# "know your land and know your prey"
|
||||||
# https://www.dailymotion.com/video/x6ozzco
|
# https://www.dailymotion.com/video/x6ozzco
|
||||||
mantracker._resource_tracker = ManTracker()
|
mantracker._resource_tracker = ManTracker()
|
||||||
mantracker.register = mantracker._resource_tracker.register
|
mantracker.register = mantracker._resource_tracker.register
|
||||||
mantracker.ensure_running = mantracker._resource_tracker.ensure_running
|
mantracker.ensure_running = mantracker._resource_tracker.ensure_running
|
||||||
ensure_running = mantracker._resource_tracker.ensure_running
|
# ensure_running = mantracker._resource_tracker.ensure_running
|
||||||
mantracker.unregister = mantracker._resource_tracker.unregister
|
mantracker.unregister = mantracker._resource_tracker.unregister
|
||||||
mantracker.getfd = mantracker._resource_tracker.getfd
|
mantracker.getfd = mantracker._resource_tracker.getfd
|
||||||
|
|
||||||
|
@ -262,10 +262,10 @@ class ShmArray:
|
||||||
|
|
||||||
if fields:
|
if fields:
|
||||||
selection = array[fields]
|
selection = array[fields]
|
||||||
fcount = len(fields)
|
# fcount = len(fields)
|
||||||
else:
|
else:
|
||||||
selection = array
|
selection = array
|
||||||
fcount = len(array.dtype.fields)
|
# fcount = len(array.dtype.fields)
|
||||||
|
|
||||||
# XXX: manual ``.view()`` attempt that also doesn't work.
|
# XXX: manual ``.view()`` attempt that also doesn't work.
|
||||||
# uview = selection.view(
|
# uview = selection.view(
|
||||||
|
@ -308,6 +308,7 @@ class ShmArray:
|
||||||
|
|
||||||
field_map: Optional[dict[str, str]] = None,
|
field_map: Optional[dict[str, str]] = None,
|
||||||
prepend: bool = False,
|
prepend: bool = False,
|
||||||
|
update_first: bool = True,
|
||||||
start: Optional[int] = None,
|
start: Optional[int] = None,
|
||||||
|
|
||||||
) -> int:
|
) -> int:
|
||||||
|
@ -320,10 +321,9 @@ class ShmArray:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
length = len(data)
|
length = len(data)
|
||||||
index = start if start is not None else self._last.value
|
|
||||||
|
|
||||||
if prepend:
|
if prepend:
|
||||||
index = self._first.value - length
|
index = (start or self._first.value) - length
|
||||||
|
|
||||||
if index < 0:
|
if index < 0:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
@ -331,6 +331,9 @@ class ShmArray:
|
||||||
f'You have passed {abs(index)} too many datums.'
|
f'You have passed {abs(index)} too many datums.'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
index = start if start is not None else self._last.value
|
||||||
|
|
||||||
end = index + length
|
end = index + length
|
||||||
|
|
||||||
if field_map:
|
if field_map:
|
||||||
|
@ -348,12 +351,17 @@ class ShmArray:
|
||||||
# tries to access ``.array`` (which due to the index
|
# tries to access ``.array`` (which due to the index
|
||||||
# overlap will be empty). Pretty sure we've fixed it now
|
# overlap will be empty). Pretty sure we've fixed it now
|
||||||
# but leaving this here as a reminder.
|
# but leaving this here as a reminder.
|
||||||
if prepend:
|
if prepend and update_first:
|
||||||
assert index < self._first.value
|
assert index < self._first.value
|
||||||
|
|
||||||
if index < self._first.value:
|
if (
|
||||||
|
index < self._first.value
|
||||||
|
and update_first
|
||||||
|
):
|
||||||
|
assert prepend, 'prepend=True not passed but index decreased?'
|
||||||
self._first.value = index
|
self._first.value = index
|
||||||
else:
|
|
||||||
|
elif not prepend:
|
||||||
self._last.value = end
|
self._last.value = end
|
||||||
|
|
||||||
self._post_init = True
|
self._post_init = True
|
||||||
|
@ -389,6 +397,7 @@ class ShmArray:
|
||||||
f"Input array has unknown field(s): {only_in_theirs}"
|
f"Input array has unknown field(s): {only_in_theirs}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# TODO: support "silent" prepends that don't update ._first.value?
|
||||||
def prepend(
|
def prepend(
|
||||||
self,
|
self,
|
||||||
data: np.ndarray,
|
data: np.ndarray,
|
||||||
|
|
Loading…
Reference in New Issue