Fonction de délai d'attente si la fin prend trop de temps
Afin d'éviter une situation où une fonction spécifique prend trop de temps à se terminer, un Un mécanisme de délai d'attente peut être implémenté. Cela implique de définir une alarme à l'aide de gestionnaires de signaux qui déclencheront une exception après une période de temps prédéterminée. Cette méthode est particulièrement utile pour les environnements UNIX.
Voici comment utiliser ce mécanisme :
import errno import os import signal import functools class TimeoutError(Exception): pass def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): def decorator(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) @functools.wraps(func) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return wrapper return decorator
from timeout import timeout # Timeout a long running function with the default expiry of 10 seconds. @timeout def long_running_function(): ... # Timeout after 5 seconds @timeout(5) def another_long_running_function(): ...
Cela garantit que toute fonction décorée avec @timeout sera interrompue si elle dépasse le délai d'attente spécifié.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!