PYTHON · 예외처리
재시도 패턴 (tenacity)
실패할 수 있는 작업에 재시도 로직을 적용하는 패턴입니다. 지수 백오프와 조건부 재시도를 다룹니다.
예외처리고급retry재시도tenacitybackoff
핵심 설명
실패할 수 있는 작업에 재시도 로직을 적용하는 패턴입니다. 지수 백오프와 조건부 재시도를 다룹니다.
Python code
import time
import random
from functools import wraps
def retry(max_attempts=3, delay=1.0, backoff=2.0, exceptions=(Exception,)):
"""재시도 데코레이터 (지수 백오프)"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
current_delay = delay
for attempt in range(1, max_attempts + 1):
try:
return func(*args, **kwargs)
except exceptions as e:
if attempt == max_attempts:
raise
print(f" 시도 {attempt} 실패: {e}, "
f"{current_delay:.1f}초 후 재시도")
time.sleep(current_delay * 0.01) # 데모용 축소
current_delay *= backoff
return wrapper
return decorator
@retry(max_attempts=5, delay=0.5, backoff=2.0,
exceptions=(ConnectionError,))
def unreliable_api():
if random.random() < 0.6:
raise ConnectionError("서버 응답 없음")
return {"status": "success", "data": [1, 2, 3]}
# 실행
try:
result = unreliable_api()
print(f"성공: {result}")
except ConnectionError:
print("최종 실패")
# tenacity 라이브러리 패턴
# from tenacity import retry, stop_after_attempt, wait_exponential
# @retry(stop=stop_after_attempt(3),
# wait=wait_exponential(multiplier=1, max=10))
# def call_api(): ...학습 팁
실제 프로젝트에서는 pip install tenacity를 사용하세요. 조건부 재시도, 콜백, 통계 등 풍부한 기능을 제공합니다.
주의할 점
모든 예외에 재시도하면 프로그래밍 오류(TypeError, ValueError)까지 재시도합니다. 네트워크 에러 등 일시적 오류만 지정하세요.
자주 묻는 질문
재시도 패턴 (tenacity)란 무엇인가요?
실패할 수 있는 작업에 재시도 로직을 적용하는 패턴입니다. 지수 백오프와 조건부 재시도를 다룹니다.
재시도 패턴 (tenacity) 학습 시 주의할 점은 무엇인가요?
모든 예외에 재시도하면 프로그래밍 오류(TypeError, ValueError)까지 재시도합니다. 네트워크 에러 등 일시적 오류만 지정하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.