Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion python/ndstorage/ndtiff_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,11 @@ def add_index_entry(self, data, new_image_updates=True):
self.index[frozenset(image_coordinates.items())] = index_entry

if index_entry.filename not in self._readers_by_filename:
new_reader = SingleNDTiffReader(os.path.join(self.path, index_entry.filename), file_io=self.file_io)
# prevent new reader object when writing:
if self._writable and self.current_writer.filename.split(os.sep)[-1] == index_entry.filename:
new_reader = self.current_writer.reader
else:
new_reader = SingleNDTiffReader(os.path.join(self.path, index_entry.filename), file_io=self.file_io)
self._readers_by_filename[index_entry.filename] = new_reader
# Should be the same on every file so resetting them is fine
self.major_version, self.minor_version = new_reader.major_version, new_reader.minor_version
Expand Down
8 changes: 6 additions & 2 deletions python/ndstorage/ndtiff_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import time
import struct
import warnings
import mmap
from collections import OrderedDict
from io import BytesIO
from .file_io import NDTiffFileIO, BUILTIN_FILE_IO
Expand Down Expand Up @@ -314,6 +315,8 @@ def __init__(self, tiff_path, file_io: NDTiffFileIO = BUILTIN_FILE_IO, summary_m
self.file_io = file_io
self.tiff_path = tiff_path
self.file = self.file_io.open(tiff_path, "rb")
# mmap speeds up random access
self.mmap_file = mmap.mmap(self.file.fileno(), 0, prot=mmap.PROT_READ)
if summary_md is None:
self.summary_md, self.first_ifd_offset = self._read_header()
else:
Expand All @@ -323,6 +326,7 @@ def __init__(self, tiff_path, file_io: NDTiffFileIO = BUILTIN_FILE_IO, summary_m

def close(self):
""" """
self.mmap_file.close()
self.file.close()

def _read_header(self):
Expand Down Expand Up @@ -364,8 +368,8 @@ def _read(self, start, end):
"""
convert to python ints
"""
self.file.seek(int(start), 0)
return self.file.read(end - start)
self.mmap_file.seek(int(start), 0)
return self.mmap_file.read(end - start)

def read_metadata(self, index):
return json.loads(
Expand Down
Loading