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

Haider Ali 2023년10월10일
Python에서 요청에 대한 최대 재시도 설정

이 튜토리얼에서는 최대 재시도 초과라는 오류가 발생하는 이유와 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인 경우 추가로 재시도를 요구합니다. 재시도를 더 세밀하게 제어하려면 재시도를 수정할 수 있습니다.

작가: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn

관련 문장 - Python Requests