HOWTO · Python

Python에서 요청에 대한 최대 재시도 설정

이 튜토리얼은 Python에서 요청에 대해 max_retries를 설정하는 방법을 보여줍니다.

이 튜토리얼에서는 최대 재시도 초과라는 오류가 발생하는 이유와 Python에서 요청에 대해 max_retries를 설정하는 방법을 설명합니다. 또한 서버의 로드로 인해 이 오류가 발생하는 경우 팁을 제공합니다.

Python에서 요청 오류, 원인 및 솔루션에 대해 max_retries 설정

Python에서 요청에 대해 max_retries를 설정하는 방법을 살펴보기 전에 먼저 몇 가지 문제를 해결해 보겠습니다.

  • 첫째, 이 오류는 URL이 올바르지 않은 경우 발생할 수 있습니다. 따라서 요청하는 URL이 유효한지 확인해야 합니다.
  • 이 오류는 인터넷 연결로 인해 발생할 수도 있으므로 이러한 문제가 없는지 확인하십시오.
  • 서버 과부하가 있을 때도 이 오류가 발생합니다. 서버 사용량이 많을 때 이러한 유형의 오류가 발생할 수 있습니다.

여기에서 URL 요청 재시도 횟수를 늘리는 현상이 도움이 됩니다. 어떻게 할 수 있는지 알아봅시다. 그러나 먼저 다음 코드를 살펴보십시오.

예제 코드:

import requests

# increass retries number
retries = 4  # enter the number of retires you want to increase
requests.adapters.DEFAULT_RETRIES = retries

이것은 Python에서 URL 요청에 대한 재시도 횟수를 늘릴 수 있는 방법인데 서버의 부하로 인해 이 오류가 발생하는 경우 다음 팁을 사용할 수 있습니다.

참고: 다음 명령을 사용하여 Python에 requests 모듈을 설치해야 합니다.

python -m pip install requests

Python에서 요청에 대해 max_retries 설정을 제거하는 팁

서버의 로드로 인해 이 오류가 발생하는 경우 다음 팁 중 하나를 사용할 수 있습니다.

  • keep_alive 비활성화

    세션의 keep_alive 기능을 비활성화할 수 있습니다. 다음 코드는 이를 수행하는 방법을 설명합니다.

    request_session = requests.session()
    # disable keep_alive
    request_session.keep_alive = False
    request_session.get(your_url)
    
  • 시간 초과 사용

    서버가 과부하되거나 사용 중이거나 위치에서 멀리 떨어져 있는 경우 동일한 오류가 발생하는 이유가 될 수 있습니다. 이를 방지하기 위해 응답 시간을 늘릴 수 있습니다.

    서버의 POSTGET 요청 모두로 이를 수행할 수 있습니다. 예를 들어 다음 코드를 살펴보십시오.

    import requests
    
    # the time in seconds in this example is increasing time by 5
    req = requests.get(your_url, timeout=5)
    req = requests.post(your_url, timeout=5)
    

    timeout 매개변수에서 튜플을 사용할 수도 있습니다. 첫 번째 매개변수는 빌드 시간을 늘리고 두 번째 매개변수는 응답 시간을 늘립니다. 코드 예제는 다음과 같습니다.

    req = requests.get(your_url, timeout=(3, 6))
    
  • backoff_factor(지연/절전) 설정

    backoff_factor는 초기에 네트워크 연결을 설정하기 위해 요청에 사용되는 urllib3 인수입니다.

    각 시도의 시도 횟수와 절전 시간을 늘리기 위해 backoff_factor를 설정할 수도 있습니다.

    이 오류가 발생하지 않도록 합니다. 이를 통해 코드 조각을 중지하고 서버의 응답을 받을 때까지 기다리게 합니다.

    다음은 서비스 요청이 실패할 때마다 backoff_factor가 서비스 요청을 지연시키는 방법에 대한 그림입니다.

    # you can set a backoff factor means delay/sleep time in each retry
    import requests
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    # initailize the request session
    request_session = requests.Session()
    # initailizing retry object
    # you can increase the number of total retires and sleep time of each retry
    retries = Retry(total=3, backoff_factor=1)
    adapter = HTTPAdapter(max_retries=retry)
    request_session.mount("http://", adapter)
    request_session.get(your_url)
    

    urllib3 문서에 따르면 backoff_factor는 라이브러리가 재시도 사이의 휴면 간격을 결정하는 데 사용하는 기본 값입니다.

    예를 들어 연결 시도가 실패할 때마다 urllib3{backoff_factor} * (2(총 재시도 횟수 - 1))초 동안 휴면 상태가 됩니다.

    예를 들어 backoff_factor0.01로 설정된 경우 sleep()0.0s, 0.2s, 0.4s,… 동안 재시도 사이에 휴면 상태가 됩니다. 백오프는 기본적으로 비활성화되어 있습니다(0으로 설정).

    반환된 상태 코드가 500, 502, 503 또는 504인 경우 추가로 재시도를 요구합니다. 재시도를 더 세밀하게 제어하려면 재시도를 수정할 수 있습니다.