From 4c61f0c84726d7cb81a0bdc5d2ebd0b608b7c8d8 Mon Sep 17 00:00:00 2001 From: Joel Collins Date: Fri, 6 Nov 2020 10:27:22 +0000 Subject: [PATCH] Reduced long-term lock usage --- openflexure_microscope/camera/pi.py | 8 +-- openflexure_microscope/microscope.py | 76 +++++++++++++-------------- openflexure_microscope/stage/sanga.py | 3 +- 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/openflexure_microscope/camera/pi.py b/openflexure_microscope/camera/pi.py index 5881acdd..11dafab8 100644 --- a/openflexure_microscope/camera/pi.py +++ b/openflexure_microscope/camera/pi.py @@ -315,7 +315,7 @@ class PiCameraStreamer(BaseCamera): def start_preview(self, fullscreen=True, window=None): """Start the on board GPU camera preview.""" - with self.lock(): + with self.lock(timeout=1): try: if not self.camera.preview: logging.debug("Starting preview") @@ -340,7 +340,7 @@ class PiCameraStreamer(BaseCamera): def stop_preview(self): """Stop the on board GPU camera preview.""" - with self.lock(): + with self.lock(timeout=1): if self.camera.preview: self.camera.stop_preview() self.preview_active = False @@ -359,7 +359,7 @@ class PiCameraStreamer(BaseCamera): output_object (str/BytesIO): Target object. """ - with self.lock: + with self.lock(timeout=5): # Start recording method only if a current recording is not running if not self.record_active: @@ -388,7 +388,7 @@ class PiCameraStreamer(BaseCamera): def stop_recording(self): """Stop the last started video recording on splitter port 2.""" - with self.lock: + with self.lock(timeout=5): # Stop the camera video recording on port 2 logging.info("Stopping recording") self.camera.stop_recording(splitter_port=2) diff --git a/openflexure_microscope/microscope.py b/openflexure_microscope/microscope.py index 6e5b9bff..17d2be9f 100644 --- a/openflexure_microscope/microscope.py +++ b/openflexure_microscope/microscope.py @@ -189,9 +189,7 @@ class Microscope: Return: dict: Dictionary containing complete microscope state """ - with self.lock: - state = {"camera": self.camera.state, "stage": self.stage.state} - return state + return {"camera": self.camera.state, "stage": self.stage.state} def update_settings(self, settings: dict): """ @@ -242,27 +240,26 @@ class Microscope: "extensions": self.extension_settings, } - with self.lock: - # If attached to a camera - if self.camera: - settings_current_camera = self.camera.read_settings() - settings_current["camera"] = settings_current_camera + # If attached to a camera + if self.camera: + settings_current_camera = self.camera.read_settings() + settings_current["camera"] = settings_current_camera - # If attached to a stage - if self.stage: - settings_current_stage = self.stage.read_settings() - settings_current["stage"] = settings_current_stage + # If attached to a stage + if self.stage: + settings_current_stage = self.stage.read_settings() + settings_current["stage"] = settings_current_stage - # Capture manager - settings_current_captures = self.captures.read_settings() - settings_current["captures"] = settings_current_captures + # Capture manager + settings_current_captures = self.captures.read_settings() + settings_current["captures"] = settings_current_captures - settings_full = self.settings_file.merge(settings_current) + settings_full = self.settings_file.merge(settings_current) - if full: - return settings_full - else: - return settings_current + if full: + return settings_full + else: + return settings_current def save_settings(self): """ @@ -274,28 +271,27 @@ class Microscope: self.settings_file.save(current_config, backup=True) def force_get_configuration(self): - with self.lock: - initial_configuration = self.configuration_file.load() + initial_configuration = self.configuration_file.load() - current_configuration = { - "application": { - "name": "openflexure-microscope-server", - "version": pkg_resources.get_distribution( - "openflexure-microscope-server" - ).version, - }, - "stage": { - "type": self.stage.__class__.__name__, - **self.stage.configuration, - }, - "camera": { - "type": self.camera.__class__.__name__, - **self.camera.configuration, - }, - } + current_configuration = { + "application": { + "name": "openflexure-microscope-server", + "version": pkg_resources.get_distribution( + "openflexure-microscope-server" + ).version, + }, + "stage": { + "type": self.stage.__class__.__name__, + **self.stage.configuration, + }, + "camera": { + "type": self.camera.__class__.__name__, + **self.camera.configuration, + }, + } - initial_configuration.update(current_configuration) - return initial_configuration + initial_configuration.update(current_configuration) + return initial_configuration def get_configuration(self, cache_key=None): if cache_key: diff --git a/openflexure_microscope/stage/sanga.py b/openflexure_microscope/stage/sanga.py index 437ff3d9..549ab5b9 100644 --- a/openflexure_microscope/stage/sanga.py +++ b/openflexure_microscope/stage/sanga.py @@ -56,8 +56,7 @@ class SangaStage(BaseStage): @property def position(self): - with self.lock(timeout=None): - return self.board.position + return self.board.position @property def backlash(self):