Maison >développement back-end >Tutoriel Python >Comment puis-je implémenter des délais pour bloquer les appels de fonction en Python ?

Comment puis-je implémenter des délais pour bloquer les appels de fonction en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 02:20:011009parcourir

How Can I Implement Time Limits for Blocking Function Calls in Python?

Mise en œuvre de limites de temps pour les appels de fonction

Dans certains scénarios, un appel de fonction dans votre code peut se bloquer de manière inattendue, provoquant des retards inacceptables. Ce problème survient lorsque la fonction provient d'un module externe, vous laissant un contrôle limité sur son exécution. Pour résoudre ce problème, il est essentiel d'introduire une limite de temps sur le temps d'exécution de la fonction.

Une solution efficace consiste à utiliser un autre thread. En utilisant une fonction de délai d'attente, vous pouvez spécifier une durée d'exécution maximale pour l'appel de fonction d'origine. Si ce délai est dépassé, une exception est générée, vous permettant de gérer la situation avec élégance.

L'implémentation améliorée suivante fournit une approche claire et concise en utilisant l'instruction with :

import signal
from contextlib import contextmanager

class TimeoutException(Exception): pass

@contextmanager
def time_limit(seconds):
    def signal_handler(signum, frame):
        raise TimeoutException("Timed out!")
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(seconds)
    try:
        yield
    finally:
        signal.alarm(0)

try:
    with time_limit(10):
        long_function_call()
except TimeoutException as e:
    print("Timed out!")

En utilisant cette technique, vous pouvez limiter efficacement le temps d'exécution des appels de fonction, évitant ainsi les retards excessifs et garantissant une application contrôlée et réactive.

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