From b252a4776f0f5eb292637767ed521a88862b4302 Mon Sep 17 00:00:00 2001 From: Stefan Hahmann Date: Thu, 8 May 2025 10:26:10 +0200 Subject: [PATCH 1/2] Ensure to Pre-Load imports in main thread --- src/appose/python_worker.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/appose/python_worker.py b/src/appose/python_worker.py index 0509634..d965a1b 100644 --- a/src/appose/python_worker.py +++ b/src/appose/python_worker.py @@ -140,6 +140,17 @@ def execute_script(): self._report_completion() + # pre-load imports in before starting a new separate Thread. + # in windows some imports (e.g. numpy) lead to the script get stuck if loaded in separate thread + block = ast.parse(script, mode='exec') + import_nodes = [ + node for node in block.body + if isinstance(node, (ast.Import, ast.ImportFrom)) + ] + import_block = ast.Module(body=import_nodes, type_ignores=[]) + compiled_imports = compile(import_block, filename="", mode="exec") + exec(compiled_imports, globals()) + # Create a thread and save a reference to it, in case its script # ends up killing the thread. This happens e.g. if it calls sys.exit. self.thread = Thread(target=execute_script, name=f"Appose-{self.uuid}") From ce5812e6aeadc3bf89c732b988a0a44e45195f0a Mon Sep 17 00:00:00 2001 From: Stefan Hahmann Date: Thu, 8 May 2025 12:57:41 +0200 Subject: [PATCH 2/2] Reduce line length of comment --- src/appose/python_worker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/appose/python_worker.py b/src/appose/python_worker.py index d965a1b..6b4c59c 100644 --- a/src/appose/python_worker.py +++ b/src/appose/python_worker.py @@ -141,7 +141,8 @@ def execute_script(): self._report_completion() # pre-load imports in before starting a new separate Thread. - # in windows some imports (e.g. numpy) lead to the script get stuck if loaded in separate thread + # in windows some imports (e.g. numpy) lead to the script + # get stuck if loaded in separate thread block = ast.parse(script, mode='exec') import_nodes = [ node for node in block.body