Python 오류 재 시도 방법 총화

머리말
Tenacity 는 아파 치 2.0 에서 권한 을 수 여 받 은 유 니 버 설 재 시도 라 이브 러 리 로 Python 으로 작성 되 어 거의 모든 내용 에 재 시도 행 위 를 추가 하 는 작업 을 간소화 합 니 다.그것 은 다시 시도 하 는 가지 에서 기원 되 었 는데,애석 하 게 도 이 가 지 는 더 이상 존재 하지 않 는 다.
Tenacity 를 사용 하면 테스트 사례 의 재 달리기,파충류 스 크 립 트 의 재 달리기,그리고 표를 빼 앗 는 실패 재 강탈 등 을 할 수 있 습 니 다.사용 할 수 있 는 장면 도 많다.
쓰다
우선 Tenacity 설치

pip install Tenacity
무한 재 시도
첫 번 째 재 시도 사례 는 줄곧 이상 한 오 류 를 던 졌 기 때문에 무한 재 시도 집행 을 한다.

from tenacity import retry

@retry()
def test_retry():
	print('     ')
 raise Exception
 
test_retry()

성공 하면 멈춘다
우리 가 한 번 성공 한 후에 절 차 를 최적화 하면 종료 된다.그렇지 않 으 면 계속 다시 시도 한다.

from tenacity import retry
import random

@retry()
def test_retry():
 if random.randint(0,10) > 1:
  print('     ')
  raise Exception
 else:
  print('  ')

test_retry()

재 시도 횟수
계속 재 시도 하려 면 많은 자원 을 소모 해 야 하기 때문에 우 리 는 재 시도 횟수 를 설정 할 수 있다.예 를 들 어 몇 번 실패 한 후에 재 시도 하 는 것 을 중단 하고 성공 하 든 안 하 든 간 에.

from tenacity import retry,stop_after_attempt
import random

@retry(stop=stop_after_attempt(7))
def test_retry():
 # if random.randint(0,10) > 1:
  print('     ')
  raise Exception
 # else:
 #  print('  ')

test_retry()

재 시도 시간
실행 시간 을 설정 할 수도 있어 요.

from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('     ')
  raise Exception
 # else:
 #  print('  ')

test_retry()

조건 부 조합
심지어 여러 조합 조건 을 사용 하여 정지 할 수 있 으 며,어떤 조건 이 먼저 촉발 되면 어느 것 을 집행 할 수 있 습 니까?

from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3) | stop_after_attempt(2))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('     ')
  raise Exception
 # else:
 #  print('  ')

test_retry()

다시 시도 간격
재 시도 사이 의 간격 이 너무 짧 기 때문에 재 시도 사이 에 2 초 를 기다 리자.

from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed
import random
import time
@retry(wait=wait_fixed(2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('     ')
  print(time.ctime())
  raise Exception
 # else:
 #  print('  ')

test_retry()

다시 시도 무 작위 간격
우 리 는 대기 시간 범 위 를 설정 할 수 있다.

from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed,wait_random
import random
import time
@retry(wait=wait_random(min=1,max=2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('     ')
  print(time.ctime())
  raise Exception
 # else:
 #  print('  ')

test_retry()

이전 로그 다시 시도
실행 하기 전에 로 그 를 인쇄 합 니 다.

from tenacity import retry,stop_after_attempt,before_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),before=before_log(logger,logging.DEBUG))
def test_retry():
 print('     ')
 raise Exception('Fail')

test_retry()

재 시도 후 로그
같은 것 은 실행 실패 후 로 그 를 인쇄 할 수 있 습 니 다.

from tenacity import retry,stop_after_attempt,after_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),after=after_log(logger,logging.DEBUG))
def test_retry():
 print('     ')
 raise Exception('Fail')

test_retry()


기본적으로 자주 사용 하 는 기능 은 이것 입 니 다.깊이 이해 해 야 할 것 이 있 으 면 github 주 소 를 방문 할 수 있 습 니 다https://github.com/jd/tenacity
파 이 썬 오류 재 시도 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 오류 재 시도 방법 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기