Python 에서 이상 재 시도 한 솔 루 션 상세 설명
모두 가 데이터 캡 처 를 할 때 네트워크 문제 로 인 한 프로그램 저장 을 자주 만 났 습 니 다.이전 에는 잘못된 내용 만 기록 하고 잘못된 내용 을 후기 처리 하 였 습 니 다.
원래 의 절차:
def crawl_page(url):
pass
def log_error(url):
pass
url = ""
try:
crawl_page(url)
except:
log_error(url)
개 선 된 프로 세 스:
attempts = 0
success = False
while attempts < 3 and not success:
try:
crawl_page(url)
success = True
except:
attempts += 1
if attempts == 3:
break
최근 발 견 된 새로운 솔 루 션:retryingretrying 은 Python 의 재 시도 패키지 로 실 패 했 을 수도 있 는 프로그램 을 자동 으로 재 시도 할 수 있 습 니 다.
retrying
장식 기 함수retry
를 제공 합 니 다.장 식 된 함 수 는 실행 에 실패 한 조건 에서 다시 실 행 됩 니 다.기본적으로 계속 잘못 보고 하면 계속 다시 시도 합 니 다.
import random
from retrying import retry
@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print do_something_unreliable()
만약 우리 가have_a_try
함 수 를 실행한다 면random.randint
5 로 돌아 갈 때 까지 실행 이 끝 날 것 입 니 다.그렇지 않 으 면 계속 다시 실 행 될 것 입 니 다.retry 는 일부 인 자 를 받 아들 일 수 있 습 니 다.이 소스 코드 에서 Retrying 류 의 초기 화 함 수 는 선택 할 수 있 는 인 자 를 볼 수 있 습 니 다.
stop_max_attempt_number
:최대 시도 횟수 를 설정 하고 이 횟수 를 초과 하면 재 시도 중지stop_max_delay
:예 를 들 어 10000 으로 설정 하면 장식 되 어 있 는 함수 가 실행 되 는 시간 부터 함수 가 성공 적 으로 실행 되 거나 실 패 를 보고 하여 중단 되 는 시간 까지 이 시간 이 10 초 를 초과 하면 함 수 는 다시 실행 되 지 않 습 니 다wait_fixed
:두 번retrying
사이 에 설 치 된 체류 시간wait_random_min wait_random_max
:무 작위 로 두 번retrying
간 의 체류 시간wait_exponential_multiplier wait_exponential_max
:지수 형식 으로 두 번retrying
간 의 체류 시간 을 발생 시 키 고 발생 하 는 수 치 는2^previous_attempt_number * wait_exponential_multiplier
이 며previous_attempt_number
는 앞에서 이미retry
의 횟수 이다.만약 에 발생 하 는 이 수치 가wait_exponential_max
의 크기 를 초과 하면 그 다음 에 두 retrying 간 의 체류 치 는 모두wait_exponential_max
이다.이 디자인 은exponential backoff
알고리즘 에 맞 춰 막 힌 상황 을 줄 일 수 있다.4567918) retry_on_exception
함수 대상 에 전달 해 야 합 니 다.
def retry_if_io_error(exception):
return isinstance(exception, IOError)
@retry(retry_on_exception=retry_if_io_error)
def read_a_file():
with open("file", "r") as f:
return f.read()
read_a_file
함 수 를 실행 하 는 과정 에서 이상 을 보고 하면 이 이상 은 형 삼exception
으로retry_if_io_error
함수 에 들 어가exception
이IOError
이면retry
진행retry
하고 그렇지 않 으 면 운행 을 중단 하고 이상 을 던 집 니 다.우 리 는 또 어떤 결 과 를 얻 을 때
retry_on_result
로 가 야 하 는 지 지정 할 수 있 습 니 다.이것 은get_result
함수 대상 에 전달 해 야 합 니 다.
def retry_if_result_none(result):
return result is None
@retry(retry_on_result=retry_if_result_none)
def get_result():
return None
실행result
에 성공 하면 함수 의 반환 값 을 형 삼retry_if_result_none
형식 으로None
함수 에 전달 하고 반환 값 이retry
이면(4567914)진행(4567914)합 니 다.그렇지 않 으 면 함수 값 을 끝내 고 되 돌려 줍 니 다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.