Maison >développement back-end >Tutoriel Python >Comment puis-je gérer gracieusement les délais d'attente des fonctions en Python ?

Comment puis-je gérer gracieusement les délais d'attente des fonctions en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 22:44:09775parcourir

How Can I Gracefully Handle Function Timeouts in Python?

Gestion du délai d'attente des fonctions en Python

Lors de l'appel d'une fonction susceptible de s'exécuter indéfiniment ou de rencontrer des problèmes nécessitant l'arrêt du script, un mécanisme de délai d'attente est utile . En Python, nous pouvons utiliser les méthodes suivantes pour gérer les délais d'attente des fonctions avec élégance.

Utilisation du module signal :

S'il est exécuté sur un système UNIX, le package signal fournit un moyen de gérer les délais d'attente. En enregistrant un gestionnaire de délai d'attente, nous pouvons annuler l'exécution de la fonction si elle dépasse le délai prédéterminé. Voici un exemple utilisant le signal :

import signal

# Register a handler for the timeout
def handler(signum, frame):
    print("Forever is over!")
    raise Exception("end of time")

# Define a potentially long-running function
def loop_forever():
    import time
    while 1:
        print("sec")
        time.sleep(1)

# Set up the signal handler
signal.signal(signal.SIGALRM, handler)

# Define the timeout duration (in seconds)
timeout = 10
signal.alarm(timeout)

# Attempt to execute the function
try:
    loop_forever()
except Exception as exc:
    print(exc)

# Cancel the timeout after the function completes
signal.alarm(0)

Lorsque la fonction loop_forever() dépasse le délai d'attente de 10 secondes, la fonction de gestionnaire est appelée, déclenchant une exception qui peut être gérée dans le code principal.

Remarque :

Il est important d'utiliser le module de signal avec prudence. Il n'est pas entièrement thread-safe, il est donc préférable d'éviter de l'utiliser dans des applications multithread.

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