Встречается на собеседованиях • сегодня

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

Для мониторинга зависших процессов в Python можно использовать несколько подходов:

  1. Таймауты – установить максимальное время выполнения:
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()  # Принудительно завершаем
  1. Проверка активности – регулярный обмен сигналами между процессами через очередь или событие.

  2. Внешний мониторинг – использование специализированных инструментов:

  • psutil для проверки CPU/памяти
  • Системные утилиты (top, htop)
  • Оркестраторы (Celery, Airflow)
  1. Декораторы/менеджеры контекста – обертки с автоматическим таймаутом:
python
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

Критически важно предусмотреть механизм очистки ресурсов при принудительном завершении.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы