Merge branch 'variable-lock-timeout' into 'master'

Variable lock timeout

See merge request openflexure/openflexure-microscope-server!64
This commit is contained in:
Joel Collins 2020-06-25 17:02:34 +00:00
commit 768b005fe1
5 changed files with 52 additions and 52 deletions

View file

@ -23,7 +23,7 @@ class BaseCamera(metaclass=ABCMeta):
self.thread = None
self.camera = None
self.lock = StrictLock(name="Camera", timeout=None)
self.lock = StrictLock(name="Camera", timeout=1)
self.frame = None
self.last_access = 0
@ -55,7 +55,7 @@ class BaseCamera(metaclass=ABCMeta):
@abstractmethod
def update_settings(self, config: dict):
"""Update settings from a config dictionary"""
with self.lock:
with self.lock(timeout=None):
# Apply valid config params to camera object
for key, value in config.items(): # For each provided setting
if hasattr(self, key): # If the instance has a matching property

View file

@ -195,7 +195,7 @@ class PiCameraStreamer(BaseCamera):
logging.debug("PiCameraStreamer: Applying config:")
logging.debug(config)
with self.lock:
with self.lock(timeout=None):
# Apply valid config params to Picamera object
if not self.record_active: # If not recording a video
@ -301,7 +301,7 @@ class PiCameraStreamer(BaseCamera):
"""
Change the camera zoom, handling re-centering and scaling.
"""
with self.lock:
with self.lock(timeout=None):
self.zoom_value = float(zoom_value)
if self.zoom_value < 1:
self.zoom_value = 1
@ -448,7 +448,7 @@ class PiCameraStreamer(BaseCamera):
resolution ((int, int)): Resolution to set the camera to, before starting recording.
Defaults to `self.stream_resolution`.
"""
with self.lock:
with self.lock(timeout=None):
# If stream object was destroyed
if not hasattr(self, "stream"):
self.stream = io.BytesIO() # Create a stream object

View file

@ -153,7 +153,7 @@ class Microscope:
Return:
dict: Dictionary containing complete microscope state
"""
with self.lock:
with self.lock(timeout=None):
state = {"camera": self.camera.state, "stage": self.stage.state}
return state
@ -161,7 +161,7 @@ class Microscope:
"""
Applies a settings dictionary to the microscope. Missing parameters will be left untouched.
"""
with self.lock:
with self.lock(timeout=None):
logging.debug("Microscope: Applying settings: {}".format(settings))
# If attached to a camera
@ -199,39 +199,38 @@ class Microscope:
This is to ensure that settings for currently disconnected hardware
don't get removed from the settings file.
"""
with self.lock:
settings_current = {
"id": self.id,
"name": self.name,
"fov": self.fov,
"extensions": self.extension_settings,
}
settings_current = {
"id": self.id,
"name": self.name,
"fov": self.fov,
"extensions": self.extension_settings,
}
with self.lock(timeout=None):
# If attached to a camera
if self.camera:
settings_current_camera = self.camera.read_settings()
settings_current["camera"] = settings_current_camera
settings_current_camera = self.camera.read_settings()
settings_current["camera"] = settings_current_camera
# Store an encoded copy of the PiCamera lens shading table, if it exists
if hasattr(self.camera, "read_lens_shading_table"):
# Read LST. Returns None if no LST is active
lst_arr = self.camera.read_lens_shading_table()
# Store an encoded copy of the PiCamera lens shading table, if it exists
if hasattr(self.camera, "read_lens_shading_table"):
# Read LST. Returns None if no LST is active
lst_arr = self.camera.read_lens_shading_table()
if lst_arr is not None:
b64_string, dtype, shape = serialise_array_b64(lst_arr)
if lst_arr is not None:
b64_string, dtype, shape = serialise_array_b64(lst_arr)
settings_current["camera"]["lens_shading_table"] = {
"@type": "ndarray",
"b64_string": b64_string,
"dtype": dtype,
"shape": shape,
}
settings_current["camera"]["lens_shading_table"] = {
"@type": "ndarray",
"b64_string": b64_string,
"dtype": dtype,
"shape": shape,
}
# If attached to a stage
if self.stage:
settings_current_stage = self.stage.read_settings()
settings_current["stage"] = settings_current_stage
settings_current_stage = self.stage.read_settings()
settings_current["stage"] = settings_current_stage
# Capture manager
settings_current_captures = self.captures.read_settings()
@ -255,27 +254,28 @@ class Microscope:
@property
def configuration(self):
initial_configuration = self.configuration_file.load()
with self.lock(timeout=None):
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
@property
def metadata(self):

View file

@ -11,7 +11,7 @@ class BaseStage(metaclass=ABCMeta):
"""
def __init__(self):
self.lock = StrictLock(name="Stage", timeout=5)
self.lock = StrictLock(name="Stage", timeout=1)
@abstractmethod
def update_settings(self, config: dict):

View file

@ -51,7 +51,7 @@ class SangaStage(BaseStage):
@property
def position(self):
with self.lock:
with self.lock(timeout=None):
return self.board.position
@property