diff --git a/webui/app.py b/webui/app.py index 0c6cd5ef..08f1907a 100644 --- a/webui/app.py +++ b/webui/app.py @@ -1,6 +1,7 @@ import json import os import sys +import gc import tempfile from importlib.resources import files @@ -178,6 +179,7 @@ def run_graphgen(params: WebuiParams, progress=gr.Progress()): "nodes": nodes, } + engine = None try: # 4. Initialize and Run Engine engine = Engine(config, operators) @@ -214,6 +216,10 @@ def run_graphgen(params: WebuiParams, progress=gr.Progress()): raise gr.Error(f"Error occurred: {str(e)}") finally: + if engine: + del engine + gc.collect() + # Clean up workspace cleanup_workspace(working_dir) # Optional: keep for debugging or enable diff --git a/webui/utils/cache.py b/webui/utils/cache.py index 0c9412f2..85a3486e 100644 --- a/webui/utils/cache.py +++ b/webui/utils/cache.py @@ -1,6 +1,9 @@ -import os -import shutil +import time import uuid +import shutil +import os +import sys +import stat def setup_workspace(folder): @@ -17,6 +20,18 @@ def setup_workspace(folder): return log_file, working_dir -def cleanup_workspace(folder): - if os.path.exists(folder): - shutil.rmtree(folder) +def on_rm_error(func, path, exc_info): + st = os.stat(path) + os.chmod(path, st.st_mode | stat.S_IWRITE) + + time.sleep(0.5) + try: + func(path) + except Exception: + pass + +def cleanup_workspace(working_dir): + if sys.version_info >= (3, 12): + shutil.rmtree(working_dir, onexc=on_rm_error) + else: + shutil.rmtree(working_dir, onerror=on_rm_error)