Was macht python-resilience?
Python-Resilienz-Muster einschließlich automatischer Wiederholungen, exponentiellem Backoff, Timeouts und fehlertoleranten Dekoratoren. Verwenden Sie es beim Hinzufügen von Wiederholungslogik, Implementieren von Timeouts, Erstellen fehlertoleranter Dienste oder Behandeln vorübergehender Fehler.
Übersicht
Dieses Repository enthält eine Reihe von Python-Dekoratoren und Hilfsfunktionen, die robuste und fehlertolerante Dienste ermöglichen. Es kapselt gängige Resilienzmuster wie:
- Automatische Wiederholungen (Retries) mit konfigurierbarer maximaler Anzahl
- Exponentieller Backoff mit Jitter zur Vermeidung von Überlastung
- Timeouts für externe Aufrufe oder zeitkritische Operationen
- Fehlertoleranz-Dekoratoren für allgemeine Fehlerbehandlung
Verwendung
Installieren Sie das Paket über pip:
pip install python-resilience
Fügen Sie dann die Dekoratoren zu Ihren Funktionen hinzu:
from resilience import retry
@retry(max_retries=3, backoff_factor=2, timeout=5)
def unstable_service_call(url):
# Code, der fehlschlagen könnte
pass
Dekoratoren
| Dekorator | Beschreibung |
|---|---|
@retry | Wiederholt die Funktion bei Fehlern mit exponentiellem Backoff |
@timeout | Setzt ein maximales Timeout für die Funktionsausführung |
@fault_tolerant | Kombiniert Wiederholungen und Timeouts für maximale Fehlertoleranz |
Beispiel mit exponentiellem Backoff
from resilience import retry
import time
@retry(max_retries=5, backoff_factor=2, jitter=True)
def fetch_data(api_url):
response = requests.get(api_url)
response.raise_for_status()
return response.json()
Timeout-Handling
from resilience import timeout
@timeout(seconds=10)
def long_running_task():
# Aufgabe, die möglicherweise hängt
pass
Infrastruktur
- Python-Version: 3.8 oder höher
- Abhängigkeiten:
tenacity,backoff(optional) - Installation:
pip install python-resilienceoder über requirements.txt
Konfiguration
Sie können die globale Konfiguration über Umgebungsvariablen anpassen:
RESILIENCE_MAX_RETRIES: Standardanzahl an Wiederholungen (Standard: 3)RESILIENCE_BACKOFF_FACTOR: Backoff-Faktor (Standard: 2)RESILIENCE_TIMEOUT: Standard-Timeout in Sekunden (Standard: 30)
Erweiterte Nutzung
Benutzerdefinierte Fehlerbehandlung
from resilience import retry
@retry(max_retries=5, retry_on=[ConnectionError, TimeoutError], on_retry_callback=lambda e, attempt: print(f"Versuch {attempt}: {e}"))
def connect_to_service():
# Verbindung zu einem Dienst
pass
Kombination mehrerer Dekoratoren
from resilience import retry, timeout, circuit_breaker
@circuit_breaker(failure_threshold=5, recovery_timeout=60)
@retry(max_retries=3, backoff_factor=2)
@timeout(seconds=10)
def critical_operation():
# Kritische Operation mit maximaler Resilienz
pass
Fehlerbehandlung
Das Paket definiert benutzerdefinierte Ausnahmen:
RetryExhaustedError: Wird ausgelöst, wenn alle Wiederholungen fehlgeschlagen sindTimeoutError: Wird ausgelöst, wenn das Timeout überschritten wirdCircuitBreakerOpenError: Wird ausgelöst, wenn der Trennschalter geöffnet ist
Testen
Führen Sie die Tests aus:
pytest tests/ -v
Lizenz
MIT-Lizenz