Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich verhindern, dass Python-Funktionen aufgrund einer Zeitüberschreitung auf unbestimmte Zeit angehalten werden?

Wie kann ich verhindern, dass Python-Funktionen aufgrund einer Zeitüberschreitung auf unbestimmte Zeit angehalten werden?

DDD
DDDOriginal
2024-12-24 00:55:09961Durchsuche

How Can I Prevent Indefinitely Halting Python Functions with a Timeout?

Timeout bei Funktionsaufrufen

Wenn Sie eine Funktion in Python aufrufen, die die Ausführung des Skripts möglicherweise auf unbestimmte Zeit anhält, muss ein Mechanismus dafür eingerichtet werden es verhindern. Die Lösung besteht darin, einen Timeout-Schwellenwert festzulegen, nach dem das Skript eingreift und die Funktion beendet.

Verwendung des Signalpakets

Für UNIX-basierte Systeme das Signalpaket bietet eine robuste Lösung. So verwenden Sie es:

  1. Importieren Sie das Signalpaket: Importsignal
  2. Definieren Sie eine Handlerfunktion, die bei Zeitüberschreitung aufgerufen werden soll. Diese Funktion sollte eine Ausnahme auslösen, um den Prozess zu beenden.
  3. Verwenden Sie die Funktion signal.alarm(), um die Timeout-Dauer anzugeben.
  4. Legen Sie den SIGALRM-Signalhandler mit signal.signal(signal.SIGALRM) fest , Handler).
  5. Rufen Sie die potenziell blockierende Funktion innerhalb eines Try-Blocks auf. Im Falle einer Zeitüberschreitung wird die Handler-Ausnahme ausgelöst.
  6. Wenn gewünscht, brechen Sie den Timer mit signal.alarm(0) ab, sobald die Funktion innerhalb der vorgegebenen Zeit abgeschlossen wurde.

Hier ist ein anschauliches Beispiel:

import signal

# Handler function
def handler(signum, frame):
    print("Timeout reached!")
    raise Exception("Timeout exception")

# Function that may stall indefinitely
def loop_forever():
    while True:
        print("Looping")
        # Pause execution for 1 second
        time.sleep(1)

# Set timeout to 5 seconds
signal.alarm(5)
signal.signal(signal.SIGALRM, handler)

try:
    loop_forever()
except Exception as exc:
    print("Exception:", exc)

Wenn die Funktion loop_forever() nicht innerhalb von 5 Sekunden abgeschlossen werden kann, wird die Handler-Funktion ausgeführt aufgerufen, wodurch die Timeout-Ausnahme ausgelöst und der Prozess beendet wird.

Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass Python-Funktionen aufgrund einer Zeitüberschreitung auf unbestimmte Zeit angehalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn