이로 인해 max_retries가 변경 될뿐만 아니라 모든 http : // 주소에 대한 요청을 재 시도하기 전에 일정 시간 동안 (총 5 회) 백 오프 전략이 활성화됩니다 .
import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get('http://httpstat.us/500')
당 문서화Retry
다음 backoff_factor 경우 0.1 후 슬립 () 잠 것 [0.1 초, 0.2 초, 0.4s, ...] 트라이 사이. 반환 된 상태 코드가 500 , 502 , 503 또는 504 인 경우에도 재 시도를 강제합니다 .
Retry
보다 세밀한 제어 를 허용하는 다양한 기타 옵션 :
- total – 허용되는 총 재시도 횟수입니다.
- connect – 재 시도 할 연결 관련 오류 수.
- 읽기 – 읽기 오류시 재시도 횟수입니다.
- 리디렉션 – 수행 할 리디렉션 수입니다.
- method_whitelist – 다시 시도해야하는 대문자 HTTP 메소드 동사 세트입니다.
- status_forcelist – 강제로 다시 시도해야하는 일련의 HTTP 상태 코드입니다.
- backoff_factor – 시도 사이에 적용 할 백 오프 계수.
- raise_on_redirect – 리디렉션 수가 소진되었는지, 3xx 범위
MaxRetryError
의 응답 코드를 사용하여 응답을 반환 할지 여부를 지정 합니다.
- raise_on_status - 유사 의미 raise_on_redirect : 우리는 예외를 발생, 또는 상태에 빠진다 경우, 응답을 반환할지 여부를 status_forcelist 범위와 시도가 고갈되고있다.
NB : raise_on_status 는 비교적 새롭고 아직 urllib3 또는 요청의 릴리스로 만들지 않았습니다. raise_on_status 키워드 인수는 파이썬 버전 3.6에서 대부분의 표준 라이브러리에 그것을 만든 것으로 보인다.
특정 HTTP 상태 코드에서 요청을 재 시도하려면 status_forcelist를 사용 하십시오 . 예를 들어 status_forcelist = [503] 은 상태 코드 503 (서비스를 사용할 수 없음) 에서 다시 시도합니다 .
기본적으로 재 시도는 다음 조건에서만 실행됩니다.
- 수영장에서 연결할 수 없습니다.
TimeoutError
HTTPException
제기되었습니다 ( Python 3의 http.client 에서 그렇지 않으면 httplib ). URL 또는 프로토콜이 올바르게 구성되지 않은 것과 같은 저수준 HTTP 예외 인 것 같습니다.
SocketError
ProtocolError
이는 일반적인 HTTP 응답을 수신하지 못하게하는 모든 예외입니다. 경우 어떤 일정한 응답이 생성되고, 더 재 시도가 수행되지 않습니다. status_forcelist를 사용하지 않으면 상태 500의 응답조차도 재 시도되지 않습니다.
원격 API 또는 웹 서버 작업에보다 직관적 인 방식으로 작동하게하려면 위 코드 스 니펫을 사용하여 상태 500 , 502 , 503 및 504 에서 재 시도를 강제 로 수행합니다. 충분한 백 오프 기간이 주어지면 웹 및 복구 가능합니다.
편집 : urllib3Retry
에서 직접 클래스를 가져 옵니다 .