이 글은 주로 Python의 비정상적인 재시도에 대한 솔루션을 소개합니다. 글의 소개는 매우 자세하게 설명되어 있어 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
최근 발견된 새로운 솔루션: 재시도
재시도는 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를 반환할 때까지 끝나지 않고, 그렇지 않으면 다시 실행됩니다.
재시도는 일부 매개변수를 허용할 수도 있습니다. 소스 코드에 있는 Retrying 클래스의 초기화 함수에서 선택적 매개변수를 볼 수 있습니다:
<a href="http://www.php.cn/wiki/904.html" target="_blank">top<code>s<a href="http://www.php.cn/wiki/904.html" target="_blank">top</a>_max_attempt_number
_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
wait_exponential_max
exponential backoff
예외가 발생할 때 재시도할 예외를 지정할 수 있습니다. retry_on_<a href="http://www.php.cn/%20wiki/%20265.html" target="_blank">예외</a>
retry_on_<a href="http://www.php.cn/wiki/265.html" target="_blank">exception</a>
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
def retry_if_result_none(result): return result is None @retry(retry_on_result=retry_if_result_none) def get_result(): return None
을 성공적으로 실행한 후
함수의 반환 값
의 형태로 get_result
함수에 전달됩니다. >, , 그렇지 않으면 함수 값을 종료하고 반환합니다. result
retry_if_result_none
None
요약retry
[관련 추천]
특별히 추천
: "php Programmer Toolbox" V0.1 버전 다운로드2. Python 무료 동영상 튜토리얼
3. Python 기본 입문 튜토리얼
위 내용은 예외 발생 시 재시도 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!