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!