Понимание модуля повторной попытки Tenacity
Я написал несколько исключений в конце кода. Может ли кто-нибудь объяснить, что именно не так с моим кодом, как правильно использовать упорство?
также я не мог понять использование reraise = True и False.
import requests
from tenacity import retry, stop_after_attempt, wait_exponential, RetryError, wait_fixed, retry_if_exception_type, after, before
from urllib3.exceptions import ConnectTimeoutError, MaxRetryError
def log_attempt_number(retry_state):
"""return the result of the last call attempt"""
print(f"attempt {retry_state.attempt_number} failed,will try once more.")
def log_before(retry_state):
print(f"starting to attempt for {retry_state.attempt_number} time")
# Define the retry decorator
@retry(
reraise = True,
retry = retry_if_exception_type(),
stop=stop_after_attempt(3), # Maximum number of retries
wait=wait_fixed(3),
before=log_before,
after=log_attempt_number
)
def make_request(data):
response = requests.get('http://localhost:8888/', timeout=0.1)
response.raise_for_status()
return response
def fun():
try:
response = make_request({ 'key': 'value' })
print(f'SUCCESS: {response}')
except requests.RequestException as e:
print(f'FAILED: {e}')
except ConnectTimeoutError as e:
print(f'FAILED 2: {e}')
except MaxRetryError as e:
print(f'FAILED 3: {e}')
except RetryError as e:
print(f'FAILED 4: {e}')
print("[REACHED HERE]")
print(make_request.retry.statistics)
fun()
Я просто изучаю, как использовать упорство модуля повтора. И написал эту часть кода.