From b33ccf00f9fc39881bc835b3e7847247789c9822 Mon Sep 17 00:00:00 2001 From: lixiangcheng1 Date: Wed, 25 Feb 2026 19:09:52 +0800 Subject: [PATCH] [fix]Force re-importing Trio in child processes (to avoid inheriting the state of the parent process) --- api/app/tasks.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/app/tasks.py b/api/app/tasks.py index 99755b83..d60af6e5 100644 --- a/api/app/tasks.py +++ b/api/app/tasks.py @@ -1,4 +1,5 @@ import asyncio +from concurrent.futures import ThreadPoolExecutor import json import os import re @@ -368,7 +369,7 @@ def build_graphrag_for_kb(kb_id: uuid.UUID): print(f"{datetime.now().strftime('%H:%M:%S')} GraphRAG task result for task {task}:\n{result}\n") return result - try: + def sync_task(): trio.run( lambda: _run( row=task, @@ -383,6 +384,10 @@ def build_graphrag_for_kb(kb_id: uuid.UUID): with_community=with_community, ) ) + try: + with ThreadPoolExecutor(max_workers=1) as executor: + future = executor.submit(sync_task) + future.result() # Blocks until the task completes except Exception as e: print(f"{datetime.now().strftime('%H:%M:%S')} GraphRAG task failed for task {task}:\n{str(e)}\n") finally: