[dataio/nix] adding mutex, writing data_array, and the last chunk

This commit is contained in:
wendtalexander 2024-10-22 10:10:09 +02:00
parent 12e82dceee
commit 4f7ebbe8c3

View File

@ -1,5 +1,6 @@
import time
from IPython import embed
from PyQt6.QtCore import QMutex
import nixio
from pyrelacs.dataio.circbuffer import CircBuffer
@ -12,29 +13,53 @@ class NixWriter:
def __init__(self, buffer: CircBuffer) -> None:
self.buffer = buffer
def write_nix(self, *args, **kwargs):
self._write_header()
items = 0
chunk = 1000
def write_nix(
self,
data_array: nixio.DataArray,
mutex: QMutex,
channel: int = 0,
chunk_size=1000,
*args,
**kwargs,
):
index = 0
log.debug("Starting the writing")
self.write = True
while self.write:
total_count = self.buffer.totalcount()
if total_count - items >= chunk:
# log.debug(items)
total_count = self.buffer.totalcount(channel=channel)
if total_count - index >= chunk_size:
mutex.lock()
log.debug(index)
try:
data, _ = self.buffer.read(items, extend=chunk)
self.data_array.append(data)
_, data = self.buffer.read(
index, extend=chunk_size, channel=channel
)
if index == 0:
data_array.write_direct(data)
else:
data_array.append(data)
index += chunk_size
except IndexError as e:
time.sleep(0.001)
log.debug(f"{e}")
items += chunk
mutex.unlock()
else:
time.sleep(0.001)
continue
total_count = self.buffer.totalcount(channel=channel)
try:
mutex.lock()
_, data = self.buffer.read(
index, extend=total_count - index, channel=channel
)
data_array.append(data)
mutex.unlock()
index += total_count - index
except IndexError as e:
log.error(f"Could not read the last samples, {e}")
log.debug("Stoppint the writing")
log.debug(f"Samples written {items}")
self.nix_file.close()
log.debug(f"Samples written {index}")
def _write_header(self):
self.nix_file = nixio.File.open(path="data.nix", mode=nixio.FileMode.Overwrite)