Skip to content

Commit ba760a9

Browse files
committed
Attempt to aid memory issues
1 parent 71edea3 commit ba760a9

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

runtimepy/net/arbiter/housekeeping/__init__.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
class ConnectionMetricsPoller(_ArbiterTask):
2222
"""A class that periodically polls connection metrics."""
2323

24+
processors: list[Awaitable[None]]
25+
2426
def __init__(
2527
self,
2628
name: str,
@@ -31,6 +33,7 @@ def __init__(
3133

3234
super().__init__(name, **kwargs)
3335
self.manager = manager
36+
self.processors = []
3437

3538
def _init_state(self) -> None:
3639
"""Add channels to this instance's channel environment."""
@@ -51,22 +54,22 @@ async def dispatch(self) -> bool:
5154
self.manager.poll_metrics()
5255

5356
# Handle any incoming commands.
54-
processors: list[Awaitable[None]] = []
5557
for mapping in (
5658
self.app.connections.values(),
5759
self.app.tasks.values(),
5860
self.app.structs.values(),
5961
):
6062
for item in mapping:
6163
if isinstance(item, AsyncCommandProcessingMixin):
62-
processors.append(item.process_command_queue())
64+
self.processors.append(item.process_command_queue())
6365

6466
# Service connection tasks. The connection manager should probably do
6567
# this on its own at some point.
66-
processors += list(self.app.conn_manager.connection_tasks)
68+
self.processors += list(self.app.conn_manager.connection_tasks)
6769

68-
if processors:
69-
await asyncio.gather(*processors)
70+
if self.processors:
71+
await asyncio.gather(*self.processors)
72+
self.processors.clear()
7073

7174
return True
7275

runtimepy/net/server/app/env/tab/message.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,7 @@ def handle_shown_state(
6969
for name in env.names:
7070
self._setup_callback(name, state)
7171
else:
72-
# Remove callbacks for primitives.
73-
for name, val in state.callbacks.items():
74-
state.primitives[name].remove_callback(val)
72+
state.clear_telemetry()
7573

7674
# Save current UI state.
7775
state.latest_ui_values.update(latest)

runtimepy/net/server/websocket/state.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,36 @@ def frame(self, time: float) -> JsonMessage:
5353

5454
return result
5555

56+
def clear_telemetry(self) -> None:
57+
"""Clear all telemetry interactions."""
58+
59+
# Remove callbacks for primitives.
60+
for name, val in self.callbacks.items():
61+
self.primitives[name].remove_callback(val)
62+
self.callbacks.clear()
63+
self.primitives.clear()
64+
65+
# Clear points.
66+
self.points.clear()
67+
5668
def clear_loggers(self) -> None:
5769
"""Clear all logging handlers."""
5870

71+
# Remove handlers.
5972
for logger in self._loggers:
6073
logger.removeHandler(self.tab_logger)
74+
self._loggers.clear()
75+
6176
self.tab_logger.drain_str()
62-
self._loggers = []
77+
78+
self.clear_telemetry()
6379

6480
def add_logger(self, logger: logging.Logger) -> None:
6581
"""Add a logger."""
6682

67-
logger.addHandler(self.tab_logger)
68-
self._loggers.append(logger)
83+
if logger not in self._loggers:
84+
logger.addHandler(self.tab_logger)
85+
self._loggers.append(logger)
6986

7087
@staticmethod
7188
def create() -> "TabState":

0 commit comments

Comments
 (0)