From a219c37de79b84d15b1ee44d7df089dc0704e9cd Mon Sep 17 00:00:00 2001 From: Yuichiro Tsuchiya Date: Fri, 9 Apr 2021 01:55:14 +0900 Subject: [PATCH] Fix WebRtcStreamerContext to store weakref to a worker object --- streamlit_webrtc/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/streamlit_webrtc/__init__.py b/streamlit_webrtc/__init__.py index 15ab422ec..e63771a86 100644 --- a/streamlit_webrtc/__init__.py +++ b/streamlit_webrtc/__init__.py @@ -5,6 +5,7 @@ import logging import os from typing import Dict, Hashable, NamedTuple, Optional, Union +import weakref try: from typing import TypedDict @@ -84,21 +85,26 @@ class WebRtcStreamerState(NamedTuple): class WebRtcStreamerContext: state: WebRtcStreamerState - _worker: Optional[WebRtcWorker] + _worker_ref: "Optional[weakref.ReferenceType[WebRtcWorker]]" def __init__( self, worker: Optional[WebRtcWorker], state: WebRtcStreamerState ) -> None: - self._worker = worker + self._worker_ref = weakref.ref(worker) if worker else None self.state = state + def get_worker(self) -> Optional[WebRtcWorker]: + return self._worker_ref() if self._worker_ref else None + @property def video_transformer(self) -> Optional[VideoTransformerBase]: - return self._worker.video_transformer if self._worker else None + worker = self.get_worker() + return worker.video_transformer if worker else None @property def video_receiver(self) -> Optional[VideoReceiver]: - return self._worker.video_receiver if self._worker else None + worker = self.get_worker() + return worker.video_receiver if worker else None def webrtc_streamer(