optimization fix
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
"s11_norm_enabled": false,
|
"s11_norm_enabled": false,
|
||||||
"subtract_mean_ascan": false,
|
"subtract_mean_ascan": false,
|
||||||
"hardcoded_notch_enabled": false,
|
"hardcoded_notch_enabled": false,
|
||||||
"axis": "real",
|
"axis": "imag",
|
||||||
"cut": 0.0,
|
"cut": 0.0,
|
||||||
"max": 3.0,
|
"max": 3.0,
|
||||||
"gain": 1.5,
|
"gain": 1.5,
|
||||||
|
|||||||
@@ -512,7 +512,6 @@ class BScanProcessor(BaseProcessor):
|
|||||||
y_coords: list[float] = []
|
y_coords: list[float] = []
|
||||||
z_values: list[float] = []
|
z_values: list[float] = []
|
||||||
|
|
||||||
z_values_square = np.zeros((len(history[0]["distance_data"]),len(history)),dtype=float)
|
|
||||||
time_series = [record["time_domain_data"] for record in history]
|
time_series = [record["time_domain_data"] for record in history]
|
||||||
adjusted_time_series = self._apply_mean_ascan_subtraction(time_series)
|
adjusted_time_series = self._apply_mean_ascan_subtraction(time_series)
|
||||||
|
|
||||||
@@ -525,7 +524,6 @@ class BScanProcessor(BaseProcessor):
|
|||||||
normalized_ampls = np.array(amps) / np.max(np.array(amps)[depth_mask])
|
normalized_ampls = np.array(amps) / np.max(np.array(amps)[depth_mask])
|
||||||
else:
|
else:
|
||||||
normalized_ampls = np.array(amps)
|
normalized_ampls = np.array(amps)
|
||||||
z_values_square[:,sweep_index-1] = normalized_ampls
|
|
||||||
|
|
||||||
for d, a in zip(depths, normalized_ampls, strict=False):
|
for d, a in zip(depths, normalized_ampls, strict=False):
|
||||||
x_coords.append(sweep_index)
|
x_coords.append(sweep_index)
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ class ProcessorWebSocketHandler:
|
|||||||
|
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
self.active_connections.add(websocket)
|
self.active_connections.add(websocket)
|
||||||
|
self._send_locks[websocket] = asyncio.Lock()
|
||||||
logger.info("WebSocket connected", total_connections=len(self.active_connections))
|
logger.info("WebSocket connected", total_connections=len(self.active_connections))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -87,8 +88,22 @@ class ProcessorWebSocketHandler:
|
|||||||
"""Remove a connection and log the updated count."""
|
"""Remove a connection and log the updated count."""
|
||||||
if websocket in self.active_connections:
|
if websocket in self.active_connections:
|
||||||
self.active_connections.remove(websocket)
|
self.active_connections.remove(websocket)
|
||||||
|
self._send_locks.pop(websocket, None)
|
||||||
logger.info("WebSocket disconnected", total_connections=len(self.active_connections))
|
logger.info("WebSocket disconnected", total_connections=len(self.active_connections))
|
||||||
|
|
||||||
|
async def _send(self, websocket: WebSocket, message_str: str) -> None:
|
||||||
|
"""
|
||||||
|
Send text on a connection, serialized against any other send on it.
|
||||||
|
|
||||||
|
All outbound traffic must go through here; see `_send_locks`.
|
||||||
|
"""
|
||||||
|
lock = self._send_locks.get(websocket)
|
||||||
|
if lock is None:
|
||||||
|
# Connection already torn down.
|
||||||
|
return
|
||||||
|
async with lock:
|
||||||
|
await websocket.send_text(message_str)
|
||||||
|
|
||||||
# --------------------------------------------------------------------- #
|
# --------------------------------------------------------------------- #
|
||||||
# Inbound messages
|
# Inbound messages
|
||||||
# --------------------------------------------------------------------- #
|
# --------------------------------------------------------------------- #
|
||||||
@@ -96,7 +111,7 @@ class ProcessorWebSocketHandler:
|
|||||||
"""Parse and route an inbound client message."""
|
"""Parse and route an inbound client message."""
|
||||||
# Handle ping/pong messages first (they are not JSON)
|
# Handle ping/pong messages first (they are not JSON)
|
||||||
if data == "ping":
|
if data == "ping":
|
||||||
await websocket.send_text("pong")
|
await self._send(websocket, "pong")
|
||||||
return
|
return
|
||||||
elif data == "pong":
|
elif data == "pong":
|
||||||
# Just acknowledge, no response needed
|
# Just acknowledge, no response needed
|
||||||
@@ -189,7 +204,7 @@ class ProcessorWebSocketHandler:
|
|||||||
for r in history
|
for r in history
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
await websocket.send_text(json.dumps(response))
|
await self._send(websocket, json.dumps(response))
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc: # noqa: BLE001
|
||||||
logger.error("Error getting history")
|
logger.error("Error getting history")
|
||||||
await self._send_error(websocket, f"Ошибка получения истории: {exc}")
|
await self._send_error(websocket, f"Ошибка получения истории: {exc}")
|
||||||
@@ -270,7 +285,7 @@ class ProcessorWebSocketHandler:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
response = await asyncio.to_thread(self.processor_manager.build_processor_state, processor_id)
|
response = await asyncio.to_thread(self.processor_manager.build_processor_state, processor_id)
|
||||||
await websocket.send_text(json.dumps(response))
|
await self._send(websocket, json.dumps(response))
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc: # noqa: BLE001
|
||||||
logger.error("Error getting processor state", processor_id=processor_id, error=repr(exc))
|
logger.error("Error getting processor state", processor_id=processor_id, error=repr(exc))
|
||||||
await self._send_error(websocket, f"Ошибка получения состояния процессора: {exc}")
|
await self._send_error(websocket, f"Ошибка получения состояния процессора: {exc}")
|
||||||
@@ -371,7 +386,7 @@ class ProcessorWebSocketHandler:
|
|||||||
if raw_data:
|
if raw_data:
|
||||||
payload["raw_data"] = raw_data
|
payload["raw_data"] = raw_data
|
||||||
|
|
||||||
await websocket.send_text(json.dumps(payload))
|
await self._send(websocket, json.dumps(payload))
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc: # noqa: BLE001
|
||||||
logger.error("Error sending error message", error=repr(exc))
|
logger.error("Error sending error message", error=repr(exc))
|
||||||
|
|
||||||
@@ -432,7 +447,7 @@ class ProcessorWebSocketHandler:
|
|||||||
disconnected: list[WebSocket] = []
|
disconnected: list[WebSocket] = []
|
||||||
for websocket in list(self.active_connections): # snapshot
|
for websocket in list(self.active_connections): # snapshot
|
||||||
try:
|
try:
|
||||||
await websocket.send_text(message_str)
|
await self._send(websocket, message_str)
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc: # noqa: BLE001
|
||||||
logger.error("Broadcast to client failed; marking for disconnect", error=repr(exc))
|
logger.error("Broadcast to client failed; marking for disconnect", error=repr(exc))
|
||||||
disconnected.append(websocket)
|
disconnected.append(websocket)
|
||||||
|
|||||||
@@ -103,6 +103,11 @@ def main() -> None:
|
|||||||
# (hundreds of sweeps x 1000 points each easily exceeds it); the
|
# (hundreds of sweeps x 1000 points each easily exceeds it); the
|
||||||
# connection is silently reset with no application-level error.
|
# connection is silently reset with no application-level error.
|
||||||
ws_max_size=256 * 1024 * 1024,
|
ws_max_size=256 * 1024 * 1024,
|
||||||
|
# The client drives its own ping/pong (see web_ui websocket.js), and the
|
||||||
|
# library's keepalive task races with our large result frames on the same
|
||||||
|
# transport, tripping an assertion inside websockets' drain handling.
|
||||||
|
ws_ping_interval=None,
|
||||||
|
ws_ping_timeout=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user