Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich verhindern, dass Shell-Skriptfunktionen beim Zugriff auf Remote-Ressourcen eine Zeitüberschreitung aufweisen?

Wie kann ich verhindern, dass Shell-Skriptfunktionen beim Zugriff auf Remote-Ressourcen eine Zeitüberschreitung aufweisen?

Patricia Arquette
Freigeben: 2024-11-30 13:02:19
Original
249 Leute haben es durchsucht

How Can I Prevent Shell Script Functions from Timing Out When Accessing Remote Resources?

Timeout-Funktionen: So begrenzen Sie die Ausführungszeit

In Shell-Skripten kann es hilfreich sein, insbesondere zu verhindern, dass bestimmte Funktionen endlos ausgeführt werden wenn es um den Zugriff auf Remote-Ressourcen wie URLs geht. Durch das Festlegen von Zeitüberschreitungen können Sie sicherstellen, dass Funktionen Ihr Skript nicht aufgrund langsamer oder nicht reagierender Server einfrieren.

Eine Methode zur Implementierung von Zeitüberschreitungen besteht darin, den Timeout-Dekorator des Signalmoduls zu verwenden. Dieser in der Signaldokumentation beschriebene Dekorator verwendet Signalhandler, um einen Alarm festzulegen. Sobald das angegebene Zeitintervall verstrichen ist, wird eine Ausnahme ausgelöst, wodurch die Funktion effektiv gestoppt wird.

Um den Timeout-Dekorator zu verwenden, importieren Sie ihn aus dem Modul timeout.py und geben Sie die Timeout-Dauer (in Sekunden) als Argument an. Unten finden Sie ein Beispiel-Snippet, das einen Dekorator mit einem Standard-Timeout von 10 Sekunden und einer benutzerdefinierten Fehlermeldung erstellt:

import errno
import os
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
Nach dem Login kopieren

Um den Dekorator zu verwenden, wenden Sie ihn einfach auf Ihre lang laufende Funktion an, wie im Folgenden Beispiele:

# Default timeout of 10 seconds
@timeout
def long_running_function1():
    ...

# Timeout of 5 seconds
@timeout(5)
def long_running_function2():
    ...

# Timeout of 30 seconds, with custom error message 'Connection timed out'
@timeout(30, os.strerror(errno.ETIMEDOUT))
def long_running_function3():
    ...
Nach dem Login kopieren

Bedenken Sie, dass diese Implementierung nur auf UNIX-Systemen anwendbar ist. Durch die Implementierung von Zeitüberschreitungen mithilfe des Dekorators des Signalmoduls haben Sie jetzt die Kontrolle über die Ausführungsdauer Ihrer Funktionen und verhindern, dass diese Ihr Shell-Skript unnötig verzögern.

Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass Shell-Skriptfunktionen beim Zugriff auf Remote-Ressourcen eine Zeitüberschreitung aufweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage