From e950335577900f425d36ddf75c93fed69f93ea1a Mon Sep 17 00:00:00 2001 From: Robert Wojciechowski Date: Mon, 23 Feb 2026 05:23:25 +0000 Subject: [PATCH] Refactor worker monitor placement and remove legacy init patch --- __init__.py | 36 ------------------- workers/process_manager.py | 2 +- .../worker_monitor.py | 12 ++++--- 3 files changed, 8 insertions(+), 42 deletions(-) rename worker_monitor.py => workers/worker_monitor.py (91%) diff --git a/__init__.py b/__init__.py index e669a16..623d093 100644 --- a/__init__.py +++ b/__init__.py @@ -1,39 +1,3 @@ -import os -import sys - -# Add the directory to Python path -sys.path.append(os.path.dirname(__file__)) - -# Patch ComfyUI execution validation for DistributedVideoCollector -try: - import execution - from .distributed import ImageBatchDivider - - # Store original validate function if it exists - if hasattr(execution, 'validate_outputs'): - original_validate_outputs = execution.validate_outputs - - def patched_validate_outputs(executor, node_id, result, node_class): - if node_class == ImageBatchDivider: - return # Skip validation for our dynamic output node - return original_validate_outputs(executor, node_id, result, node_class) - - execution.validate_outputs = patched_validate_outputs - else: - # Fallback: patch the main execute method if validate_outputs doesn't exist - if hasattr(execution.PromptExecutor, 'execute'): - original_execute = execution.PromptExecutor.execute - - def patched_execute(self, prompt, prompt_id, extra_data={}, execute_outputs=[]): - # This is a more complex patch - for now just call original - # The ByPassTypeTuple should handle most validation issues - return original_execute(self, prompt, prompt_id, extra_data, execute_outputs) - - execution.PromptExecutor.execute = patched_execute - -except ImportError: - pass # ComfyUI execution module not available during import - # Import everything needed from the main module from .distributed import ( NODE_CLASS_MAPPINGS as DISTRIBUTED_CLASS_MAPPINGS, diff --git a/workers/process_manager.py b/workers/process_manager.py index d707460..c6a066f 100644 --- a/workers/process_manager.py +++ b/workers/process_manager.py @@ -220,7 +220,7 @@ class WorkerProcessManager: # Wrap command with monitor if needed if stop_on_master_exit and env.get('COMFYUI_MASTER_PID'): # Use the monitor wrapper - monitor_script = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'worker_monitor.py') + monitor_script = os.path.join(os.path.dirname(__file__), 'worker_monitor.py') monitored_cmd = [get_python_executable(), monitor_script] + cmd log_handle.write(f"[Worker Monitor] Monitoring master PID: {env['COMFYUI_MASTER_PID']}\n") log_handle.flush() diff --git a/worker_monitor.py b/workers/worker_monitor.py similarity index 91% rename from worker_monitor.py rename to workers/worker_monitor.py index c4833d4..07e95a1 100644 --- a/worker_monitor.py +++ b/workers/worker_monitor.py @@ -10,12 +10,14 @@ import subprocess import platform import signal -# Add parent directory to path to import utils -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +# Add package root to path so this script works when launched by file path. +NODE_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if NODE_ROOT not in sys.path: + sys.path.insert(0, NODE_ROOT) try: - from ComfyUI_Distributed.utils.process import is_process_alive, terminate_process - from ComfyUI_Distributed.utils.constants import WORKER_CHECK_INTERVAL, PROCESS_TERMINATION_TIMEOUT + from utils.process import is_process_alive, terminate_process + from utils.constants import WORKER_CHECK_INTERVAL, PROCESS_TERMINATION_TIMEOUT except ImportError: # Fallback if running from different context def is_process_alive(pid): @@ -127,4 +129,4 @@ if __name__ == "__main__": command = sys.argv[1:] # Start monitoring - monitor_and_run(master_pid, command) \ No newline at end of file + monitor_and_run(master_pid, command)