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

Comment gérer les délais d'attente des fonctions en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-24 10:13:45330parcourir

How to Handle Function Timeouts in Python?

Gestion des délais d'attente des fonctions en Python

Lors de l'appel d'une fonction susceptible de bloquer, il devient crucial d'avoir un mécanisme en place pour gérer correctement de telles situations et empêcher le script de se bloquer indéfiniment. Une solution efficace à ce problème consiste à définir un délai d'attente pour l'appel de fonction.

Le module de signal Python fournit la fonctionnalité nécessaire pour enregistrer un gestionnaire de signal qui sera invoqué si la fonction dépasse le délai d'attente spécifié. Voici comment cela peut être implémenté :

import signal

def handler(signum, frame):
    print("Timeout reached!")
    raise Exception("Function call timed out")

def function_to_timeout():
    print("Running function...")
    # Simulate a long-running task
    for i in range(10):
        time.sleep(1)

# Register the signal handler
signal.signal(signal.SIGALRM, handler)

# Set a timeout of 5 seconds
signal.alarm(5)

try:
    # Call the function
    function_to_timeout()
except Exception as exc:
    print(exc)

Lorsque function_to_timeout() est appelée, elle imprimera un message indiquant qu'elle est en cours d'exécution. Le signal.alarm(5) définit un délai d'attente de 5 secondes, après quoi la fonction de gestionnaire sera déclenchée. Dans le gestionnaire, une exception est levée pour mettre fin à l'appel de fonction.

Cette approche vous permet de définir un délai d'attente spécifique pour la fonction et de quitter le script en douceur au cas où la fonction prendrait plus de temps que le temps 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!

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