Limiter le temps d'exécution des appels de fonction : une analyse plus approfondie
Lorsque vous traitez le blocage des appels de fonction liés aux sockets pendant des périodes prolongées, une préoccupation courante se pose : comment limiter leur temps d’exécution. Étant donné que ces fonctions sont souvent dérivées de modules externes, contrôler directement leur comportement peut poser un défi.
Pour résoudre ce problème, une solution utilisant un thread séparé est conseillée. L'introduction d'un thread supplémentaire vous permet de définir une limite de délai d'attente et de mettre fin à la fonction si la limite est dépassée.
Utilisation du module 'signal' pour les limites d'exécution basées sur les threads
Le module 'signal' en Python fournit une approche efficace pour implémenter des délais d'exécution. Il vous permet d'envoyer des signaux aux threads, y compris un signal de fin lorsque le délai est atteint.
Voici un exemple montrant comment utiliser le module 'signal' :
import signal import threading # Define our target function that may potentially block def long_function_call(): while True: # Some operations that may consume a lot of time pass # Define a function to handle the timeout signal def signal_handler(signum, frame): raise TimeoutException("Timed out!") # Create a thread that will execute the function thread = threading.Thread(target=long_function_call) # Register the signal handler to the thread signal.signal(signal.SIGALRM, signal_handler) # Set a timeout limit (in seconds) signal.alarm(10) # Start the thread thread.start() # Wait for the thread to complete or time out thread.join() # Handle the timeout exception, if any if thread.is_alive(): print("Timed out!")
Cette approche utilise un thread séparé, garantissant que le thread principal n'est pas bloqué pendant l'exécution de la fonction cible. Le module 'signal' fournit un mécanisme pour mettre fin à la fonction lorsque le délai spécifié est écoulé.
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!