From 7ade1b1455ee6980383c8a07ff2132a1801a81f5 Mon Sep 17 00:00:00 2001 From: AlekPet Date: Sat, 28 Feb 2026 15:45:09 +0300 Subject: [PATCH] fix in the startup race condition --- __init__.py | 46 ++++++++++++++++++++++++++++++++++------------ pyproject.toml | 2 +- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/__init__.py b/__init__.py index 7a339f0..a5c0c1a 100644 --- a/__init__.py +++ b/__init__.py @@ -12,7 +12,6 @@ import __main__ import re import threading import ast -from concurrent.futures import ThreadPoolExecutor python = sys.executable @@ -41,6 +40,13 @@ module_name_cut_version = re.compile("[>=<]") installed_modules = {} # installed_modules = {m[1] for m in pkgutil.iter_modules()} +try: + from filelock import FileLock +except ImportError: + FileLock = None + +LOCK_FILE = os.path.join(extension_folder, ".install.lock") + def get_version_extension(): version = "" @@ -229,30 +235,48 @@ def install_node(nodeElement): # addComfyUINodesToMapping(nodeElement) # dynamic class nodes append in mappings +def safe_rmtree(path): + try: + if os.path.exists(path): + shutil.rmtree(path) + except Exception as e: + log(f"[AlekPet] rmtree failed for {path}: {e}") + + def installNodes(): + if FileLock: + with FileLock(LOCK_FILE, timeout=600): + _installNodes_internal() + else: + _installNodes_internal() + + +def _installNodes_internal(): global installed_modules global nodes_list_dict log(f"\n-------> AlekPet Node Installing [DEBUG] <-------") + # printColorInfo(f"### [START] ComfyUI AlekPet Nodes{get_version_extension()} ###", "\033[1;35m") # Remove files in lib directory libfiles = ["fabric.js"] for file in libfiles: filePath = os.path.join(folder__web_lib, file) - if os.path.isfile(filePath): - os.remove(filePath) + try: + if os.path.exists(filePath): + os.remove(filePath) + except Exception as e: + log(f"[AlekPet] remove failed for {filePath}: {e}") # Remove old folder if exist oldDirNodes = os.path.join(folder_comfyui_web_extensions, "AlekPet_Nodes") - if os.path.exists(oldDirNodes): - shutil.rmtree(oldDirNodes) + safe_rmtree(oldDirNodes) # Clear folder web_alekpet_nodes web_extensions_dir = os.path.join(extension_folder, extension_dirs[0]) - if os.path.exists(web_extensions_dir): - shutil.rmtree(web_extensions_dir) + safe_rmtree(web_extensions_dir) + checkFolderIsset() - installed_modules = get_installed_modules() nodes = [] @@ -268,10 +292,8 @@ def installNodes(): } nodes.append(nodeElement) - with ThreadPoolExecutor() as executor: - executor.map(install_node, nodes) - - # printColorInfo(f"### [END] ComfyUI AlekPet Nodes ###", "\033[1;35m") + for n in nodes: + install_node(n) # Mount web directory diff --git a/pyproject.toml b/pyproject.toml index 8fc1617..90bf27e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui_custom_nodes_alekpet" description = "Nodes: PoseNode, PainterNode, TranslateTextNode, TranslateCLIPTextEncodeNode, DeepTranslatorTextNode, DeepTranslatorCLIPTextEncodeNode, ArgosTranslateTextNode, ArgosTranslateCLIPTextEncodeNode, ChatGLM4TranslateCLIPTextEncodeNode, ChatGLM4TranslateTextNode, ChatGLM4InstructNode, ChatGLM4InstructMediaNode, ChatGLMImageGenerateNode, ChatGLMVideoGenerateNode, PreviewTextNode, HexToHueNode, ColorsCorrectNode, IDENode." -version = "1.0.92" +version = "1.0.93" license = { file = "LICENSE" } [project.urls]