关于Python错误重试方法总结

前言

Tenacity是一个 Apache 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

到此这篇关于关于Python错误重试方法总结的文章就介绍到这了,更多相关Python错误重试方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于Python错误重试方法总结

    前言 Tenacity是一个 Apache 2.0授权的通用重试库,用 Python 编写,用于简化向几乎所有内容添加重试行为的任务.它起源于一个重新尝试的分支,可惜这个分支已经不复存在了. 使用Tenacity可以用来进行测试用例的重跑,爬虫脚本的重跑,以及抢票的失败重抢等等...可以使用的场景也是比较多. 使用 首先安装Tenacity pip install Tenacity 无限重试 第一个重试案例,因为一直是抛出异常错误,所以无限进行重试执行 from tenacity import

  • python爬虫多次请求超时的几种重试方法(6种)

    第一种方法 headers = Dict() url = 'https://www.baidu.com' try: proxies = None response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3) except: # logdebug('requests failed one time') try: proxies = None response = requests.get(u

  • Python中最强大的错误重试库(tenacity库)

    目录 1 简介 2 tenacity中的常用功能 2.1 tenacity的基础使用 2.2 设置最大重试次数 2.3 设置重试最大超时时长 2.4 组合重试停止条件 2.5 设置相邻重试之间的时间间隔 2.6 自定义是否触发重试 2.7 对函数的错误重试情况进行统计 1 简介 我们在编写程序尤其是与网络请求相关的程序,如调用web接口.运行网络爬虫等任务时,经常会遇到一些偶然发生的请求失败的状况,这种时候如果我们仅仅简单的捕捉错误然后跳过对应任务,肯定是不严谨的,尤其是在网络爬虫中,会存在损失

  • Python出现segfault错误解决方法

    本文分析了Python出现segfault错误解决方法.分享给大家供大家参考,具体如下: 最近python程序在运行过程中偶尔会引发系统segfault的错误,而且是在不定期不同代码段时发生的,所以单步调试没办法确定是哪一行代码的问题. 段错误, 这个现象太离奇了.在系统日志里message中一开始提示为python库的问题,后台有提示过libmysqlclient, 也提示过cjson库引起的. 如果真是在特定硬件环境中python或mysql库会出现问题,那有点说不过去.如果是cjson引起

  • 自己编程中遇到的Python错误和解决方法汇总整理

    开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习. 知识在于积累嘛!微笑 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: 复制代码 代码如下: >>> def f(x, y):      print x, y  >>> t = ('a', 'b')  >>> f(t)    Traceback (most rece

  • Python提示[Errno 32]Broken pipe导致线程crash错误解决方法

    本文实例讲述了Python提示[Errno 32]Broken pipe导致线程crash错误解决方法.分享给大家供大家参考.具体方法如下: 1. 错误现象 ThreadingHTTPServer 实现的 http 服务,如果客户端在服务器返回前,主动断开连接,则服务器端会报 [Errno 32] Broken pipe 错,并导致处理线程 crash. 下面先看个例子,python 版本: 2.7 示例代码 复制代码 代码如下: #!/usr/bin/env python #!coding=u

  • python使用socket远程连接错误处理方法

    本文实例讲述了python使用socket远程连接错误处理方法.分享给大家供大家参考.具体如下: import socket, sys host = sys.argv[1] textport = sys.argv[2] filename = sys.argv[3] try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, e: print "Strange error creating sock

  • python自动重试第三方包retrying模块的方法

    retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试. 最近写了一个爬虫,需要连接国外的一个网站,经常出现掉线的情况,自己写了一个自动重连的代码,但感觉不够简洁... 后来就上万能的github,找到了一个第三包,基本能满足我的要求.这个第三方包就是retrying. 我的需求就是每当出现request相关异常的时候,就自动重来,上限连接10次:

  • 解决python对齐错误的方法

    运行的时候,有时候会出现语法错误: IndentationError: unexpected indent 可以用如下方法解决: 首先把空格显示出来,空格的地方 ,由点代替 修改把tab 代表4个位置 然后格式就对齐了. 实例扩展: 如何解决文本对齐 大家好,我是python学习新手,我在一个练习题目中遇到问题. 题目的要求是把列表打印输出并对齐. 输入数据: tableData = [['apples', 'oranges', 'cherries', 'banana'], ['Alice',

  • 解决python中0x80072ee2错误的方法

    解决python中出现x80072ee2错误的方法: 在官网上直接下载"python-3.7.2-amd64.exe"并安装即可: 因为如果安装"python-3.7.2-amd64-webinstall.exe",自动访问外网,导致无法访问. 安装错误信息: Setup failed One or more issues caused the setup to fail.Please fix the issues and then retry setup.For

随机推荐