Switch to batch-writing metadata

This commit is contained in:
Joel Collins 2020-06-15 18:00:33 +01:00
parent 5dc838d5eb
commit 44ba4b272c

View file

@ -22,7 +22,7 @@ except Exception as e:
logging.warning("Unable to import PiCameraStreamer") logging.warning("Unable to import PiCameraStreamer")
from openflexure_microscope.camera.mock import MissingCamera from openflexure_microscope.camera.mock import MissingCamera
from openflexure_microscope.utilities import serialise_array_b64 from openflexure_microscope.utilities import serialise_array_b64, Timer
from openflexure_microscope.config import user_settings, user_configuration from openflexure_microscope.config import user_settings, user_configuration
from labthings.core.lock import CompositeLock from labthings.core.lock import CompositeLock
@ -282,11 +282,17 @@ class Microscope:
""" """
Microscope system metadata, to be applied to basically all captures Microscope system metadata, to be applied to basically all captures
""" """
with Timer("Reading settings:"):
settings = self.read_settings(full=False)
with Timer("Reading state:"):
state = self.state
with Timer("Reading configuration:"):
configuration = self.configuration
system_metadata = { system_metadata = {
"id": self.id, "id": self.id,
"settings": self.read_settings(full=False), "settings": settings,
"state": self.state, "state": state,
"configuration": self.configuration, "configuration": configuration,
} }
return system_metadata return system_metadata
@ -294,16 +300,13 @@ class Microscope:
def add_metadata_to_capture(self, output, metadata, annotations, tags): def add_metadata_to_capture(self, output, metadata, annotations, tags):
logging.debug(f"Waiting for {output.file}") logging.debug(f"Waiting for {output.file}")
# Wait for the file to be written to disk # Wait for the file to be written to disk
output.file_ready.wait() with Timer("Waiting for file:"):
logging.info(f"Asynchronously injecting EXIF data into {output.file}") output.file_ready.wait()
# Inject system metadata
output.put_metadata({"instrument": self.metadata}) with Timer("Building metadata"):
# Insert custom metadata full_metadata = {"instrument": self.metadata, **metadata}
output.put_metadata(metadata) with Timer("Writing metadata to file"):
# Insert custom metadata output.put_and_save(tags, annotations, full_metadata)
output.put_annotations(annotations)
# Insert custom tags
output.put_tags(tags)
logging.info(f"Finished injecting EXIF data into {output.file}") logging.info(f"Finished injecting EXIF data into {output.file}")
def capture( def capture(
@ -344,7 +347,9 @@ class Microscope:
) )
# Gether metadata from hardware in a greenlet # Gether metadata from hardware in a greenlet
gevent.get_hub().threadpool.spawn(self.add_metadata_to_capture, output, metadata, annotations, tags) #gevent.get_hub().threadpool.spawn(self.add_metadata_to_capture, output, metadata, annotations, tags)
gevent.spawn(self.add_metadata_to_capture, output, metadata, annotations, tags)
#self.add_metadata_to_capture(output, metadata, annotations, tags)
logging.info(f"Finished capture to {output.file}") logging.info(f"Finished capture to {output.file}")