Python/Utils

파이썬 재시도 로직 모듈 tenacity 사용 예제

jimmy_AI 2025. 6. 28. 22:21
반응형

안녕하세요. 이번 글에서는 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됩니다.

 

이 글이 재시도 호출 로직을 작성하는 과정에 도움이 되셨기를 바라겠습니다.

감사합니다.