timeout init

This commit is contained in:
2025-07-27 08:55:42 -07:00
parent ee80ed28b6
commit abc48604a1
2 changed files with 45 additions and 1 deletions

View File

@@ -18,7 +18,6 @@ from pathlib import Path
from typing import Dict, Any, List, Optional, Tuple, Generator from typing import Dict, Any, List, Optional, Tuple, Generator
import warnings import warnings
import gc import gc
from .timeout_init import safe_init_state, TimeoutError
# Import SAM2 components - these will be available after SAM2 installation # Import SAM2 components - these will be available after SAM2 installation
try: try:

View File

@@ -0,0 +1,45 @@
"""
Timeout wrapper for SAM2 initialization to prevent hanging
"""
import signal
import functools
from typing import Any, Callable
class TimeoutError(Exception):
pass
def timeout(seconds: int = 120):
"""Decorator to add timeout to function calls"""
def decorator(func: Callable) -> Callable:
@functools.wraps(func)
def wrapper(*args, **kwargs) -> Any:
# Define signal handler
def timeout_handler(signum, frame):
raise TimeoutError(f"Function {func.__name__} timed out after {seconds} seconds")
# Set signal handler
old_handler = signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
# Restore old handler
signal.alarm(0)
signal.signal(signal.SIGALRM, old_handler)
return result
return wrapper
return decorator
@timeout(120) # 2 minute timeout
def safe_init_state(predictor, video_path: str, **kwargs) -> Any:
"""Safely initialize SAM2 state with timeout"""
return predictor.init_state(
video_path=video_path,
**kwargs
)