Heim >Backend-Entwicklung >Python-Tutorial >Wie unterbreche ich die Ausführung einer Python-Funktion mit einem Timeout?

Wie unterbreche ich die Ausführung einer Python-Funktion mit einem Timeout?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 11:00:16236Durchsuche

How to Interrupt a Python Function Execution with a Timeout?

Unterbrechen einer Funktion mit Zeitüberschreitung in Python

Wenn Funktionen aufgerufen werden, die möglicherweise auf unbestimmte Zeit anhalten und die weitere Ausführung des Skripts verhindern, ist dies erforderlich Implementieren Sie einen Timeout-Mechanismus. Das signal-Paket von Python bietet eine Lösung für dieses Problem.

Das signal-Paket, das hauptsächlich in UNIX-Systemen verwendet wird, ermöglicht es Ihnen, ein Timeout für eine bestimmte Funktion einzurichten. Wenn die Funktion das angegebene Timeout überschreitet, wird ein Signal ausgelöst, um die Ausführung zu unterbrechen.

Beispiel:

Stellen Sie sich eine Funktion loop_forever() vor, die auf unbestimmte Zeit ausgeführt werden kann. Wir müssen diese Funktion aufrufen, aber ein Timeout von 5 Sekunden festlegen. Wenn die Funktion länger als 5 Sekunden dauert, möchten wir ihre Ausführung abbrechen.

import signal

# Register a handler for the timeout
def handler(signum, frame):
    print("Timeout! Cancelling function execution.")
    raise Exception("Timeout exceeded!")

# Register the signal function handler
signal.signal(signal.SIGALRM, handler)

# Define a timeout of 5 seconds
signal.alarm(5)

try:
    loop_forever()
except Exception as e:
    print(str(e))
    
# Cancel the timer if the function finishes before timeout
signal.alarm(0)

In diesem Beispiel wird nach 5 Sekunden die Handler-Funktion aufgerufen, was eine Ausnahme auslöst. Diese Ausnahme wird im übergeordneten Code abgefangen, der dann den Timer abbricht und die Ausführung der Funktion „loop_forever()“ beendet.

Das obige ist der detaillierte Inhalt vonWie unterbreche ich die Ausführung einer Python-Funktion mit einem Timeout?. 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