Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Zeitüberschreitungen für Shell-Skriptfunktionen mit langer Laufzeit implementieren?

Wie kann ich Zeitüberschreitungen für Shell-Skriptfunktionen mit langer Laufzeit implementieren?

Linda Hamilton
Linda HamiltonOriginal
2024-12-03 18:20:11877Durchsuche

How Can I Implement Timeouts for Long-Running Shell Script Functions?

Timeout-Implementierung für verlängerte Shell-Skriptfunktionen

Bei der Shell-Skripterstellung kann es zu Situationen kommen, in denen die Ausführung bestimmter Funktionen übermäßig lange dauert, was zu Verzögerungen führt oder sogar Endlosschleifen. Um dies zu verhindern, ist es üblich, Zeitüberschreitungen zu implementieren, um solche Funktionen zu beenden, wenn sie nicht innerhalb eines bestimmten Zeitrahmens abgeschlossen werden.

Ein wirksamer Ansatz besteht darin, asynchrone Timer zu verwenden, um Zeitüberschreitungen durchzusetzen. Durch Festlegen eines Timers können Sie die Funktion beenden, wenn sie die angegebene Dauer überschreitet, und so sicherstellen, dass das Skript weiterhin wie vorgesehen ausgeführt wird.

Um dies zu implementieren, können Sie das von Python bereitgestellte Signalmodul nutzen. So können Sie einen Timeout-Dekorator definieren, um Ihre Funktionen zu umschließen:

import signal
import functools

class TimeoutError(Exception):
    pass

def timeout(seconds=10, error_message=os.strerror(errno.ETIME)):
    def decorator(func):
        def _handle_timeout(signum, frame):
            raise TimeoutError(error_message)

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            signal.signal(signal.SIGALRM, _handle_timeout)
            signal.alarm(seconds)
            try:
                result = func(*args, **kwargs)
            finally:
                signal.alarm(0)
            return result

        return wrapper

    return decorator

Sobald Sie den Timeout-Dekorator haben, können Sie ihn auf jede Funktion anwenden, die Sie nach einem festgelegten Timeout beenden möchten. Wenn Sie beispielsweise eine Funktion namens „long_running_function“ haben, deren Timeout nach 10 Sekunden beendet werden soll, können Sie sie wie folgt dekorieren:

from timeout import timeout

@timeout
def long_running_function():
    ...

Durch die Verwendung des Timeout-Dekorators können Sie effektiv verhindern, dass Ihre Shell-Skriptfunktionen ausgeführt werden wegen längerer Hinrichtung auf unbestimmte Zeit hängen. Dieser Ansatz stellt sicher, dass das Skript weiterhin ohne unnötige Verzögerungen oder Unterbrechungen ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeitüberschreitungen für Shell-Skriptfunktionen mit langer Laufzeit implementieren?. 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