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
Libérer: 2024-12-18 11:00:16
original
222 Les gens l'ont consulté

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)
Copier après la connexion

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!

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