Maison > développement back-end > Tutoriel Python > Comment implémenter une fonction de délai d'attente pour empêcher les processus de longue durée ?

Comment implémenter une fonction de délai d'attente pour empêcher les processus de longue durée ?

Barbara Streisand
Libérer: 2024-11-30 08:55:15
original
895 Les gens l'ont consulté

How to Implement a Timeout Function to Prevent Long-Running Processes?

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 :

  1. Créer un décorateur :
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
Copier après la connexion
  1. Appliquer le Décorateur :
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():
    ...
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal