반응형
안녕하세요. 이번 글에서는 Python에서 api 호출 등의 과정에서
재시도를 진행할 때 유용한 모듈인 tenacity에 대하여
간단한 사용 예제를 통하여 사용법을 살펴보도록 하겠습니다.
예시 코드 스니펫은 다음과 같습니다.
import aiohttp
from tenacity import retry, stop_after_attempt, wait_random_exponential
# 미설치 시 !pip install tenacity
@retry(
stop=stop_after_attempt(4),
wait=wait_random_exponential(multiplier=1, max=7),
retry_error_callback=lambda retry_state: {"status": "fallback"}
)
async def call_api(url):
async with aiohttp.ClientSession() as session:
async with session.get(url, timeout=5) as resp:
resp.raise_for_status()
return await resp.json()
위의 예시 코드에 대한 상세 설명은 다음과 같습니다.
1. @retry 데코레이터로 재시도를 원하는 함수를 감싸줍니다.
2. stop_after_attempt에서 최대 시도 횟수를 정하며, 여기서는 4번까지 시도를 반복합니다.
3. 재시도에서 최대 대기 시간은 2배씩 지수 함수로 증가합니다.
이는 wait_random_exponential에서 정해지며,
위 예시에서는 1, 2, 4, 7(max = 7로 걸림)초로 각각의 시도에서의 최대 대기 시간이 정해집니다.
(실제 대기 시간은 각 시간의 범위 내에서 랜덤으로 정해집니다.)
4. 최종 호출 실패 시에는 {"status": "fallback"}이 반환되어 최상단에서의 try - except 처리가 가능합니다.
물론, 중간에 호출 함수가 성공한 경우에는 여기서 정한 retry 로직은 즉시 종료되고
정상적인 output이 return됩니다.
이 글이 재시도 호출 로직을 작성하는 과정에 도움이 되셨기를 바라겠습니다.
감사합니다.
'Python > Utils' 카테고리의 다른 글
| 파이썬 neptune.ai 로깅 세팅 방법 정리 (0) | 2025.05.09 |
|---|---|
| Poetry에서 파이썬 버전 변경 방법 정리 (0) | 2025.04.22 |
| 파이썬 Locust 모듈 사용법 예제(부하 테스트) (0) | 2024.11.17 |