remove thread garbage collection

This commit is contained in:
Jörg Thalheim
2025-05-13 18:46:24 +02:00
parent 5a7c49ad82
commit 80cadf9268
2 changed files with 11 additions and 37 deletions

View File

@@ -2,7 +2,6 @@ import ctypes
import json
import logging
import threading
import time
from collections.abc import Callable
from dataclasses import dataclass
from enum import IntEnum
@@ -54,9 +53,6 @@ class Webview:
self._handle = _webview_lib.webview_create(int(debug), window)
self._callbacks: dict[str, Callable[..., Any]] = {}
self.threads: dict[str, WebThread] = {}
self.stopped_threads: set[str] = set()
self.lock = threading.Lock()
self.stop_garbage_collection: threading.Event = threading.Event()
if size:
self.size = size
@@ -94,28 +90,9 @@ class Webview:
def navigate(self, url: str) -> None:
_webview_lib.webview_navigate(self._handle, _encode_c_string(url))
def collect_garbage(self) -> None:
while not self.stop_garbage_collection.is_set():
with self.lock:
for op_key in list(self.threads.keys()):
if op_key in self.stopped_threads:
log.debug(f"Collecting garbage op_key: {op_key}")
del self.threads[op_key]
self.stopped_threads.remove(op_key)
if self.stop_garbage_collection.is_set():
break
time.sleep(1)
def run(self) -> None:
thread = threading.Thread(
target=self.collect_garbage, name="WebviewGarbageCollector"
)
thread.start()
_webview_lib.webview_run(self._handle)
self.stop_garbage_collection.set()
log.info("Shutting down webview...")
if self.lock.locked():
self.lock.release()
self.destroy()
def bind_jsonschema_api(self, api: MethodRegistry) -> None:
@@ -178,17 +155,16 @@ class Webview:
)
self.return_(seq.decode(), FuncStatus.FAILURE, serialized)
finally:
self.stopped_threads.add(seq.decode())
del self.threads[op_key]
stop_event = threading.Event()
thread = threading.Thread(
target=thread_task, args=(stop_event,), name="WebviewThread"
)
thread.start()
with self.lock:
self.threads[seq.decode()] = WebThread(
thread=thread, stop_event=stop_event
)
self.threads[seq.decode()] = WebThread(
thread=thread, stop_event=stop_event
)
c_callback = _webview_lib.CFUNCTYPE(
None, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_void_p