Merge branch 'flipped-timeouts' into 'master'

Flipped to explicit finite lock timeouts

See merge request openflexure/openflexure-microscope-server!66
This commit is contained in:
Joel Collins 2020-06-29 09:52:07 +00:00
commit cea4ce3453
6 changed files with 35 additions and 30 deletions

View file

@ -376,10 +376,12 @@ class FastAutofocusAPI(ActionView):
if microscope.has_real_stage(): if microscope.has_real_stage():
logging.debug("Running autofocus...") logging.debug("Running autofocus...")
# return a handle on the autofocus task # Acquire microscope lock with 1s timeout
return fast_up_down_up_autofocus( with microscope.lock(timeout=1):
microscope, dz=dz, mini_backlash=backlash # Run fast_up_down_up_autofocus
) return fast_up_down_up_autofocus(
microscope, dz=dz, mini_backlash=backlash
)
else: else:
abort(503, "No stage connected. Unable to autofocus.") abort(503, "No stage connected. Unable to autofocus.")

View file

@ -325,22 +325,23 @@ class TileScanAPI(ActionView):
logging.info("Running tile scan...") logging.info("Running tile scan...")
# return a handle on the scan task # Acquire microscope lock with 1s timeout
return scan_extension_v2.tile( with microscope.lock(timeout=1):
microscope, # Run scan_extension_v2
basename=args.get("filename"), return scan_extension_v2.tile(
temporary=args.get("temporary"), microscope,
stride_size=args.get("stride_size"), basename=args.get("filename"),
grid=args.get("grid"), temporary=args.get("temporary"),
style=args.get("style"), stride_size=args.get("stride_size"),
autofocus_dz=args.get("autofocus_dz"), grid=args.get("grid"),
use_video_port=args.get("use_video_port"), style=args.get("style"),
resize=resize, autofocus_dz=args.get("autofocus_dz"),
bayer=args.get("bayer"), use_video_port=args.get("use_video_port"),
fast_autofocus=args.get("fast_autofocus"), resize=resize,
annotations=args.get("annotations"), bayer=args.get("bayer"),
tags=args.get("tags"), fast_autofocus=args.get("fast_autofocus"),
) annotations=args.get("annotations"),
tags=args.get("tags"),
)
scan_extension_v2.add_view(TileScanAPI, "/tile", endpoint="tile") scan_extension_v2.add_view(TileScanAPI, "/tile", endpoint="tile")

View file

@ -45,8 +45,8 @@ class MoveStageAPI(ActionView):
# Move if stage exists # Move if stage exists
if microscope.stage: if microscope.stage:
# Explicitally acquire lock # Explicitally acquire lock with 1s timeout
with microscope.stage.lock: with microscope.stage.lock(timeout=1):
microscope.stage.move_rel(position) microscope.stage.move_rel(position)
else: else:
logging.warning("Unable to move. No stage found.") logging.warning("Unable to move. No stage found.")
@ -62,7 +62,9 @@ class ZeroStageAPI(ActionView):
Does not move the stage, but rather makes the current position read as [0, 0, 0] Does not move the stage, but rather makes the current position read as [0, 0, 0]
""" """
microscope = find_component("org.openflexure.microscope") microscope = find_component("org.openflexure.microscope")
microscope.stage.zero_position()
with microscope.stage.lock(timeout=1):
microscope.stage.zero_position()
# TODO: Make schema for microscope state # TODO: Make schema for microscope state
return microscope.state["stage"] return microscope.state["stage"]

View file

@ -23,7 +23,7 @@ class BaseCamera(metaclass=ABCMeta):
self.thread = None self.thread = None
self.camera = None self.camera = None
self.lock = StrictLock(name="Camera", timeout=1) self.lock = StrictLock(name="Camera", timeout=None)
self.frame = None self.frame = None
self.last_access = 0 self.last_access = 0

View file

@ -153,7 +153,7 @@ class Microscope:
Return: Return:
dict: Dictionary containing complete microscope state dict: Dictionary containing complete microscope state
""" """
with self.lock(timeout=None): with self.lock:
state = {"camera": self.camera.state, "stage": self.stage.state} state = {"camera": self.camera.state, "stage": self.stage.state}
return state return state
@ -161,7 +161,7 @@ class Microscope:
""" """
Applies a settings dictionary to the microscope. Missing parameters will be left untouched. Applies a settings dictionary to the microscope. Missing parameters will be left untouched.
""" """
with self.lock(timeout=None): with self.lock:
logging.debug("Microscope: Applying settings: {}".format(settings)) logging.debug("Microscope: Applying settings: {}".format(settings))
# If attached to a camera # If attached to a camera
@ -206,7 +206,7 @@ class Microscope:
"extensions": self.extension_settings, "extensions": self.extension_settings,
} }
with self.lock(timeout=None): with self.lock:
# If attached to a camera # If attached to a camera
if self.camera: if self.camera:
settings_current_camera = self.camera.read_settings() settings_current_camera = self.camera.read_settings()
@ -254,7 +254,7 @@ class Microscope:
@property @property
def configuration(self): def configuration(self):
with self.lock(timeout=None): with self.lock:
initial_configuration = self.configuration_file.load() initial_configuration = self.configuration_file.load()
current_configuration = { current_configuration = {

View file

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