mirror of
https://github.com/ivan-usov-org/bec.git
synced 2025-04-22 02:20:02 +02:00
fix: fixed scan def cleanup
This commit is contained in:
parent
d579d22f5b
commit
4be425277b
@ -5,19 +5,21 @@ import collections
|
|||||||
import time
|
import time
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from bec_client.callbacks.scan_progress import LiveUpdatesScanProgress
|
|
||||||
from bec_lib import bec_logger
|
from bec_lib import bec_logger
|
||||||
from bec_lib.bec_errors import ScanInterruption
|
from bec_lib.bec_errors import ScanInterruption
|
||||||
|
|
||||||
|
from bec_client.callbacks.scan_progress import LiveUpdatesScanProgress
|
||||||
|
|
||||||
from .live_table import LiveUpdatesTable
|
from .live_table import LiveUpdatesTable
|
||||||
from .move_device import LiveUpdatesReadbackProgressbar
|
from .move_device import LiveUpdatesReadbackProgressbar
|
||||||
from .utils import ScanRequestMixin, check_alarms
|
from .utils import ScanRequestMixin, check_alarms
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from bec_client import BECClient
|
|
||||||
from bec_lib import messages
|
from bec_lib import messages
|
||||||
from bec_lib.queue_items import QueueItem
|
from bec_lib.queue_items import QueueItem
|
||||||
|
|
||||||
|
from bec_client import BECClient
|
||||||
|
|
||||||
logger = bec_logger.logger
|
logger = bec_logger.logger
|
||||||
|
|
||||||
|
|
||||||
@ -155,6 +157,7 @@ class IPythonLiveUpdates:
|
|||||||
|
|
||||||
except ScanInterruption as scan_interr:
|
except ScanInterruption as scan_interr:
|
||||||
self._interrupted_request = (request, scan_report_type)
|
self._interrupted_request = (request, scan_report_type)
|
||||||
|
self._reset(forced=True)
|
||||||
raise scan_interr
|
raise scan_interr
|
||||||
|
|
||||||
def _process_queue(
|
def _process_queue(
|
||||||
@ -179,7 +182,8 @@ class IPythonLiveUpdates:
|
|||||||
"status"
|
"status"
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
f"Scan is enqueued and is waiting for execution. Current position in queue: {queue.queue_position + 1}. Queue status: {status}.",
|
"Scan is enqueued and is waiting for execution. Current position in queue:"
|
||||||
|
f" {queue.queue_position + 1}. Queue status: {status}.",
|
||||||
end="\r",
|
end="\r",
|
||||||
flush=True,
|
flush=True,
|
||||||
)
|
)
|
||||||
@ -202,12 +206,12 @@ class IPythonLiveUpdates:
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _reset(self):
|
def _reset(self, forced=False):
|
||||||
self._interrupted_request = None
|
self._interrupted_request = None
|
||||||
|
|
||||||
self._user_callback = None
|
self._user_callback = None
|
||||||
self._processed_instructions = 0
|
self._processed_instructions = 0
|
||||||
scan_closed = self._active_request.content["scan_type"] == "close_scan_def"
|
scan_closed = forced or (self._active_request.content["scan_type"] == "close_scan_def")
|
||||||
self._active_request = None
|
self._active_request = None
|
||||||
|
|
||||||
if self.client.scans._scan_def_id and not scan_closed:
|
if self.client.scans._scan_def_id and not scan_closed:
|
||||||
|
@ -282,6 +282,7 @@ class ScanDef(ContextDecorator):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def __exit__(self, *exc):
|
def __exit__(self, *exc):
|
||||||
|
if exc[0] is None:
|
||||||
self.parent.close_scan_def()
|
self.parent.close_scan_def()
|
||||||
self.parent._scan_def_id = None
|
self.parent._scan_def_id = None
|
||||||
|
|
||||||
|
@ -8,11 +8,10 @@ import traceback
|
|||||||
import uuid
|
import uuid
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
from bec_lib import Alarms, MessageEndpoints, bec_logger, messages, threadlocked
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.table import Table
|
from rich.table import Table
|
||||||
|
|
||||||
from bec_lib import Alarms, MessageEndpoints, bec_logger, messages, threadlocked
|
|
||||||
|
|
||||||
from .errors import LimitError, ScanAbortion
|
from .errors import LimitError, ScanAbortion
|
||||||
from .scan_assembler import ScanAssembler
|
from .scan_assembler import ScanAssembler
|
||||||
from .scans import ScanBase
|
from .scans import ScanBase
|
||||||
@ -94,9 +93,7 @@ class QueueManager:
|
|||||||
|
|
||||||
def _start_scan_queue_consumer(self) -> None:
|
def _start_scan_queue_consumer(self) -> None:
|
||||||
self._scan_queue_consumer = self.connector.consumer(
|
self._scan_queue_consumer = self.connector.consumer(
|
||||||
MessageEndpoints.scan_queue_insert(),
|
MessageEndpoints.scan_queue_insert(), cb=self._scan_queue_callback, parent=self
|
||||||
cb=self._scan_queue_callback,
|
|
||||||
parent=self,
|
|
||||||
)
|
)
|
||||||
self._scan_queue_modification_consumer = self.connector.consumer(
|
self._scan_queue_modification_consumer = self.connector.consumer(
|
||||||
MessageEndpoints.scan_queue_modification(),
|
MessageEndpoints.scan_queue_modification(),
|
||||||
@ -622,6 +619,8 @@ class RequestBlockQueue:
|
|||||||
def increase_scan_number(self) -> None:
|
def increase_scan_number(self) -> None:
|
||||||
"""increase the scan number counter"""
|
"""increase the scan number counter"""
|
||||||
rbl = self.active_rb
|
rbl = self.active_rb
|
||||||
|
if rbl is None:
|
||||||
|
return
|
||||||
if not rbl.is_scan and rbl.scan_def_id is None:
|
if not rbl.is_scan and rbl.scan_def_id is None:
|
||||||
return
|
return
|
||||||
if rbl.scan_def_id is None or rbl.msg.content["scan_type"] == "close_scan_def":
|
if rbl.scan_def_id is None or rbl.msg.content["scan_type"] == "close_scan_def":
|
||||||
@ -745,6 +744,7 @@ class InstructionQueueItem:
|
|||||||
def abort(self) -> None:
|
def abort(self) -> None:
|
||||||
"""abort and clear all the instructions from the instruction queue"""
|
"""abort and clear all the instructions from the instruction queue"""
|
||||||
self.instructions = iter([])
|
self.instructions = iter([])
|
||||||
|
# self.queue.request_blocks_queue.clear()
|
||||||
|
|
||||||
def append_scan_request(self, msg):
|
def append_scan_request(self, msg):
|
||||||
"""append a scan message to the instruction queue"""
|
"""append a scan message to the instruction queue"""
|
||||||
@ -826,14 +826,16 @@ class InstructionQueueItem:
|
|||||||
except StopIteration:
|
except StopIteration:
|
||||||
if not self.scan_macros_complete:
|
if not self.scan_macros_complete:
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Waiting for new instructions or scan macro to be closed (scan def ids: {self.queue.scan_def_ids})"
|
"Waiting for new instructions or scan macro to be closed (scan def ids:"
|
||||||
|
f" {self.queue.scan_def_ids})"
|
||||||
)
|
)
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
elif self.queue_group is not None and not self.queue_group_is_closed:
|
elif self.queue_group is not None and not self.queue_group_is_closed:
|
||||||
self.queue.active_rb = None
|
self.queue.active_rb = None
|
||||||
self.parent.queue_manager.send_queue_status()
|
self.parent.queue_manager.send_queue_status()
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Waiting for new instructions or queue group to be closed (group id: {self.queue_group})"
|
"Waiting for new instructions or queue group to be closed (group id:"
|
||||||
|
f" {self.queue_group})"
|
||||||
)
|
)
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
else:
|
else:
|
||||||
|
@ -694,9 +694,9 @@ class ScanWorker(threading.Thread):
|
|||||||
queue.is_active = True
|
queue.is_active = True
|
||||||
try:
|
try:
|
||||||
for instr in queue:
|
for instr in queue:
|
||||||
|
self._check_for_interruption()
|
||||||
if instr is None:
|
if instr is None:
|
||||||
continue
|
continue
|
||||||
self._check_for_interruption()
|
|
||||||
self._exposure_time = getattr(queue.active_request_block.scan, "exp_time", None)
|
self._exposure_time = getattr(queue.active_request_block.scan, "exp_time", None)
|
||||||
self._instruction_step(instr)
|
self._instruction_step(instr)
|
||||||
except ScanAbortion as exc:
|
except ScanAbortion as exc:
|
||||||
@ -749,6 +749,8 @@ class ScanWorker(threading.Thread):
|
|||||||
self.open_scan(instr)
|
self.open_scan(instr)
|
||||||
elif action == "close_scan" and scan_def_id is None:
|
elif action == "close_scan" and scan_def_id is None:
|
||||||
self.close_scan(instr, self.max_point_id)
|
self.close_scan(instr, self.max_point_id)
|
||||||
|
elif action == "close_scan" and scan_def_id is not None:
|
||||||
|
pass
|
||||||
elif action == "open_scan_def":
|
elif action == "open_scan_def":
|
||||||
pass
|
pass
|
||||||
elif action == "close_scan_def":
|
elif action == "close_scan_def":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user