Source code for shapepipe.pipeline.timeout

"""TIMEOUT.

This module defines a function for handling job timeout limits.

:Author: Samuel Farrens <samuel.farrens@cea.fr>

"""

import signal
from functools import wraps


[docs]def with_timeout(timeout, log_file): """Timeout Limit Decorator. This method provides a timeout decorator for a given input function. Parameters ---------- timeout : int Timeout limit in seconds log_file : logging.Logger Logging instance Raises ------ TimeoutError For process exceeding timeout limit """ def handler(signum, frame): raise TimeoutError( f'The process time exceeded {timeout}s in {log_file}' ) def decorator(decorated): @wraps(decorated) def inner(*args, **kwargs): signal.signal(signal.SIGALRM, handler) signal.alarm(timeout) return decorated(*args, **kwargs) return inner return decorator