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 ?
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!