Как узнать, что параллельный процесс не завис в Python

Python Middle СБЕР Центр ИИ
Как узнать, что параллельный процесс не завис в Python
Ответы
Для мониторинга зависших процессов в Python можно использовать несколько подходов: - **Таймауты** – установить максимальное время выполнения: ``` from multiprocessing import Process import time def worker(): time.sleep(10) # Имитация зависания p = Process(target=worker) p.start() p.join(timeout=5) # Ждем 5 секунд if p.is_alive(): p.terminate() # Принудительно завершаем ``` - **Проверка активности** – регулярный обмен сигналами между процессами через очередь или событие. - **Внешний мониторинг** – использование специализированных инструментов: - `psutil` для проверки CPU/памяти - Системные утилиты (`top`, `htop`) - Оркестраторы (Celery, Airflow) - **Декораторы/менеджеры контекста** – обертки с автоматическим таймаутом: ``` from functools import wraps import signal class TimeoutError(Exception): pass def timeout(seconds): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, lambda s, f: (_ for _ in ()).throw(TimeoutError())) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return wrapper return decorator ``` Критически важно предусмотреть механизм очистки ресурсов при принудительном завершении.