Maison >développement back-end >Tutoriel Python >Comment puis-je implémenter des délais d'attente pour les fonctions de script Shell de longue durée ?

Comment puis-je implémenter des délais d'attente pour les fonctions de script Shell de longue durée ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 18:20:11877parcourir

How Can I Implement Timeouts for Long-Running Shell Script Functions?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn