본문 바로가기

라이브러리

[Python] backoff 재시도 모듈 사용법

Python Backoff 모듈은 재시도 (retries)를 수행하여 일시적인 오류 (transient errors)를 처리하는 데 사용할 수 있는 파이썬 라이브러리입니다. 이 모듈을 사용하면 일시적인 오류로 인해 실패할 수 있는 작업을 안전하게 수행할 수 있습니다.

 

1. 설치


backoff 모듈을 설치하기 위해서는 pip를 사용합니다.

 

pip install backoff


2. 재시도 데코레이터


backoff 모듈의 핵심 기능은 재시도 데코레이터입니다. 재시도 데코레이터를 사용하면 일시적인 오류가 발생할 경우 지정된 시간 후에 재시도를 수행합니다.

예를 들어, 다음과 같이 함수를 정의하고 재시도 데코레이터를 적용할 수 있습니다.

 

import backoff
import requests

@backoff.on_exception(backoff.expo, requests.exceptions.RequestException, max_tries=3)
def fetch_url(url):
    response = requests.get(url)
    response.raise_for_status()
    return response.text


위 예제에서 @backoff.on_exception은 재시도 데코레이터를 적용하는 함수 데코레이터입니다. 이 데코레이터는 backoff.expo 함수를 사용하여 지수적 백오프 (exponential backoff)를 수행합니다. 또한 requests.exceptions.RequestException 예외가 발생할 때만 재시도를 수행하며, 최대 3번까지 재시도합니다.


3. 재시도 함수


backoff 모듈은 다양한 종류의 백오프 함수를 제공합니다. 이 함수들을 사용하여 재시도 간격을 지정할 수 있습니다.

  • backoff.constant(delay, max_tries=None) : 일정한 지연 시간으로 재시도합니다.
  • backoff.fibo(multiplier=1, max_tries=None) : 피보나치 수열을 따르는 지연 시간으로 재시도합니다.
  • backoff.expo(base=2, factor=1, max_value=None, max_tries=None) : 지수적 백오프를 수행합니다.
  • backoff.on_predicate(predicate, *args, **kwargs) : 주어진 조건이 참인 동안 재시도합니다.
  • backoff.on_exception(backoff_function, exception, *args, **kwargs) : 주어진 예외가 발생할 때 재시도합니다.

 

4. 재시도 설정


backoff 모듈은 재시도를 수행하는 동안 다양한 설정을 제공합니다.

  • max_tries : 최대 재시도 횟수를 지정합니다. 기본값은 None으로 무제한 재시도를 수행합니다.
  • max_value : 백오프 함수에서 반환되는 최대값을 지정합니다.
  • jitter : 재시도 간격에 무작위성을 추가합니다.
  • on_backoff : 재시도가 수행될 때 호출할 함수를 지정합니다.
  • on_success : 재시도가 성공하면 호출할 함수를 지정합니다.
  • on_giveup : 최대 재시도 횟수를 초과하면 호출할 함수를 지정합니다.

이 설정들은 @backoff.on_exception 데코레이터의 인수로 전달됩니다. 예를 들어, 다음과 같이 최대 재시도 횟수와 최대 재시도 간격을 지정할 수 있습니다.

 

@backoff.on_exception(backoff.expo, requests.exceptions.RequestException, max_tries=3, max_value=10)
def fetch_url(url):
    response = requests.get(url)
    response.raise_for_status()
    return response.text


위 예제에서는 max_tries 인수를 3으로 설정하여 최대 3번까지 재시도하며, max_value 인수를 10으로 설정하여 재시도 간격이 10초를 초과하지 않도록 합니다.