Maison  >  Article  >  développement back-end  >  Comment puis-je implémenter une limite de temps pour un appel de fonction afin d'éviter le blocage ?

Comment puis-je implémenter une limite de temps pour un appel de fonction afin d'éviter le blocage ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-22 09:24:15222parcourir

How Can I Implement a Time Limit for a Function Call to Prevent Blocking?

Implémentation d'une exécution de fonction limitée dans le temps

Dans votre code, vous rencontrez un appel de fonction lié au socket provenant d'un module externe qui se bloque occasionnellement pendant des durées inacceptables. Vous cherchez une solution pour limiter le temps d'exécution de cet appel de fonction. Une approche viable implique l'utilisation d'un autre thread.

Une version raffinée de la réponse acceptée exploite l'instruction with pour améliorer la syntaxe de la fonction timeout :

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 incorporant ce code, vous pouvez gérer les délais pour les appels de fonction et gérer efficacement les exceptions de délai d'attente.

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