Funktions-Timeout-Behandlung in Python
Wenn Sie eine Funktion aufrufen, die möglicherweise unbegrenzt ausgeführt wird oder auf Probleme stößt, die eine Beendigung des Skripts erfordern, ist ein Timeout-Mechanismus nützlich . In Python können wir die folgenden Methoden verwenden, um Funktions-Timeouts elegant zu behandeln.
Verwendung des Signalmoduls:
Bei Ausführung auf einem UNIX-System bietet das Signalpaket eine Möglichkeit, mit Zeitüberschreitungen umzugehen. Durch die Registrierung eines Timeout-Handlers können wir die Funktionsausführung abbrechen, wenn sie das vorgegebene Zeitlimit überschreitet. Hier ist ein Beispiel für die Verwendung von Signal:
import signal # Register a handler for the timeout def handler(signum, frame): print("Forever is over!") raise Exception("end of time") # Define a potentially long-running function def loop_forever(): import time while 1: print("sec") time.sleep(1) # Set up the signal handler signal.signal(signal.SIGALRM, handler) # Define the timeout duration (in seconds) timeout = 10 signal.alarm(timeout) # Attempt to execute the function try: loop_forever() except Exception as exc: print(exc) # Cancel the timeout after the function completes signal.alarm(0)
Wenn die Funktion loop_forever() das 10-Sekunden-Timeout überschreitet, wird die Handler-Funktion aufgerufen und löst eine Ausnahme aus, die im Hauptcode behandelt werden kann.
Hinweis:
Es ist wichtig, das Signalmodul mit Vorsicht zu verwenden. Es ist nicht vollständig Thread-sicher, daher ist es am besten, die Verwendung in Multithread-Anwendungen zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie kann ich Funktions-Timeouts in Python ordnungsgemäß behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!