安装:pip install retrying
导包:from retrying import retry
retrying是一个 Python的重试包,可以用来自动重试一些可能运行失败的程序段。retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的条件下重新执行
@retry(wait_fixed=3000,stop_max_attempt_number=10)
def query(i):
url = "http://www.xxxxxxxxx"
body ={
"cartnum":x,
"actiondo":"xxx"
}
result = requests.post(url=url,data=body)
if result.status_code == 200:
text = result.text
data2 = json.loads(text) # json形式的str转换为dict
if data2["liuliangleft"] != "":
left = int(data2["liuliangleft"])
if left <= 0:
print("注意该卡%s剩余流量为0" % i)
return left
else:
raise Exception("查询失败",i)
else:
raise Exception
常用参数:
stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次
stop_max_delay:比如设置成10000,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过10秒,函数就不会再执行了
wait_fixed:设置在两次retrying之间的固定停留时间,默认为1000毫秒
wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0毫秒
wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫秒
@retry(wait_random_min=1000, wait_random_max=2000)
def wait_random_1_to_2_s():
print "Randomly wait 1 to 2 seconds between retries"
retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出
def retry_if_result_none(result):
return result is None
@retry(retry_on_result=retry_if_result_none)
def get_result():
return None
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()