Files
momentry_core/test_debug_hang.py
Warren b54c2def30 feat: add migrations, test scripts, and utility tools
- Add database migrations (006-028) for face recognition, identity, file_uuid
- Add test scripts for ASR, face, search, processing
- Add portal frontend (Tauri)
- Add config, benchmark, and monitoring utilities
- Add model checkpoints and pretrained model references
2026-04-30 15:11:53 +08:00

143 lines
3.4 KiB
Python

#!/usr/bin/env python3
"""Debug the hang issue in ASR processor."""
import sys
import os
import subprocess
import tempfile
import time
import signal
# Test one of the large files
test_video = "../test_video/1636719d-c31f-78ac-f1dd-8ab0b0b36c66.mov"
if not os.path.exists(test_video):
test_video = "../test_video/Old_Time_Movie_Show_-_Charade_1963.HD.mov"
print(f"Testing: {test_video}")
print(f"Size: {os.path.getsize(test_video) / (1024**3):.2f} GB")
# Create temp output
temp_dir = tempfile.mkdtemp(prefix="asr_debug_")
output_path = os.path.join(temp_dir, "output.json")
# Use debug version
cmd = [
"/opt/homebrew/bin/python3.11",
"scripts/asr_processor_debug.py",
test_video,
output_path,
"--uuid",
"debug_test",
]
print(f"Command: {' '.join(cmd)}")
print(f"Temp dir: {temp_dir}")
# Run with timeout
timeout = 600 # 10 minutes for debugging
start = time.time()
# Use Popen to capture real-time output
proc = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=1, # Line buffered
)
# Read output in real-time
stdout_lines = []
stderr_lines = []
def read_output():
"""Read output from process in real-time."""
import select
# Set pipes to non-blocking
import fcntl
import os
fcntl.fcntl(proc.stdout, fcntl.F_SETFL, os.O_NONBLOCK)
fcntl.fcntl(proc.stderr, fcntl.F_SETFL, os.O_NONBLOCK)
while True:
# Check if process has finished
if proc.poll() is not None:
break
# Read from stdout
try:
line = proc.stdout.read()
if line:
stdout_lines.append(line)
sys.stdout.write(f"[STDOUT] {line}")
sys.stdout.flush()
except:
pass
# Read from stderr
try:
line = proc.stderr.read()
if line:
stderr_lines.append(line)
sys.stderr.write(f"[STDERR] {line}")
sys.stderr.flush()
except:
pass
time.sleep(0.1)
# Start reading output
import threading
reader_thread = threading.Thread(target=read_output)
reader_thread.daemon = True
reader_thread.start()
# Wait for process to complete or timeout
try:
proc.wait(timeout=timeout)
elapsed = time.time() - start
success = proc.returncode == 0
timeout_hit = False
except subprocess.TimeoutExpired:
elapsed = time.time() - start
success = False
timeout_hit = True
print(f"\nProcess timed out after {timeout}s, killing...")
proc.kill()
proc.wait()
print(f"\nElapsed: {elapsed:.1f}s")
print(f"Success: {success}")
print(f"Timeout: {timeout_hit}")
print(f"Return code: {proc.returncode}")
# Check output
if os.path.exists(output_path):
print(f"Output file exists: {output_path}")
import json
try:
with open(output_path, "r") as f:
data = json.load(f)
print(f"Segments: {len(data.get('segments', []))}")
except Exception as e:
print(f"Error reading output: {e}")
else:
print("Output file does not exist")
# Save logs
log_file = os.path.join(temp_dir, "debug_log.txt")
with open(log_file, "w") as f:
f.write("=== STDOUT ===\n")
f.write("".join(stdout_lines))
f.write("\n=== STDERR ===\n")
f.write("".join(stderr_lines))
print(f"\nLogs saved to: {log_file}")
print(f"Temp directory preserved: {temp_dir}")