Maison >développement back-end >Tutoriel Python >Comment interrompre l'exécution d'une fonction Python avec un délai d'attente ?

Comment interrompre l'exécution d'une fonction Python avec un délai d'attente ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 11:00:16225parcourir

How to Interrupt a Python Function Execution with a Timeout?

Interrompre une fonction avec délai d'attente en Python

Lors de l'appel de fonctions qui peuvent se bloquer indéfiniment, empêchant le script de s'exécuter davantage, il devient nécessaire de mettre en œuvre un mécanisme de délai d'attente. Le package signal de Python fournit une solution à ce problème.

Le package signal, principalement utilisé dans les systèmes UNIX, vous permet de configurer un délai d'attente pour une fonction spécifique. Si la fonction dépasse le délai d'attente spécifié, un signal est émis pour interrompre l'exécution.

Exemple :

Considérons une fonction loop_forever() qui peut s'exécuter indéfiniment. Nous devons appeler cette fonction mais définir un délai d'attente de 5 secondes. Si la fonction prend plus de 5 secondes, nous souhaitons annuler son exécution.

import signal

# Register a handler for the timeout
def handler(signum, frame):
    print("Timeout! Cancelling function execution.")
    raise Exception("Timeout exceeded!")

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

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

try:
    loop_forever()
except Exception as e:
    print(str(e))
    
# Cancel the timer if the function finishes before timeout
signal.alarm(0)

Dans cet exemple, après 5 secondes, la fonction gestionnaire est appelée, déclenchant une exception. Cette exception est interceptée dans le code parent, qui annule alors le timer et termine l'exécution de la fonction loop_forever().

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