Implémentation du délai d'attente pour les fonctions de script Shell prolongées
Dans les scripts Shell, vous pouvez rencontrer des situations dans lesquelles certaines fonctions prennent un temps excessif à s'exécuter, entraînant des retards ou même des boucles infinies. Pour éviter cela, il est courant d'implémenter des délais d'attente pour mettre fin à ces fonctions si elles ne parviennent pas à se terminer dans un délai spécifié.
Une approche efficace consiste à utiliser des minuteries asynchrones pour appliquer les délais d'attente. En définissant une minuterie, vous pouvez mettre fin à la fonction si elle dépasse la durée spécifiée, garantissant ainsi que le script continue de s'exécuter comme prévu.
Pour implémenter cela, vous pouvez exploiter le module de signal fourni par Python. Voici comment définir un décorateur de délai d'attente pour envelopper vos fonctions :
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
Une fois que vous avez le décorateur de délai d'attente, vous pouvez l'appliquer à n'importe quelle fonction que vous souhaitez mettre fin après un délai d'attente défini. Par exemple, si vous avez une fonction appelée long_running_function que vous souhaitez expirer après 10 secondes, vous pouvez la décorer comme suit :
from timeout import timeout @timeout def long_running_function(): ...
En utilisant le décorateur de délai d'attente, vous pouvez efficacement empêcher les fonctions de votre script shell de suspendu indéfiniment en raison d'une exécution prolongée. Cette approche garantit que le script continue de s'exécuter sans retards ni interruptions inutiles.
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!