python重试模块的使用方法详解

  

<强>前言

  

我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过试块去进行重试,但是每次都写那么一堆试块,真的是太麻烦,所以今天就来说一个比较神谕的的模块,进行重试。

  

<>强安装

  

重试模块的安装很简单直接用匹配安装即可。

        pip安装      

retring模块通过装饰器的形式来进行重试操作的,首先我们看一个简单的例子

        从进口重试重试   @retry (stop_max_attempt_number=5, wait_random_min=1000, wait_random_max=5000)   def run ():   打印(“开始重试”)   提高NameError      if __name__==癬_main__”:   run ()      

上面的代码干了哪些事呢,首先导入retring的重试模块
  

  

然后装饰一个运行函数,然后调用运行时,函数内容很简单就是通过提高抛出一个异常,执行该代码我们发现。程序打印了五次开始重试,最后一次抛出异常,NameError。
  

  

到这里我们可以感受到重试了,就是这么简单的代码,就完成了五次重试,同时这五次重试的间隔时间也是不同的。
  

  

如果想尝试10次就把上面的stop_max_attempt_number=5,改成10即可,到这里就可以解释重试装饰器的参数了
  

  

stop_max_attempt_number:最大重试次数,超过这个次数会停止重试,并报异常。
  

  

wait_random_min:随机等待最小时间。
  

  

wait_random_max:随机等待最大时间。
  

  

好了重试的使用就是这么简单,在需要重试的函数上面加个装饰器就好了。
  

  

关键是装饰器里的参数的使用,下面列举了重试的参数。
  

  

如果不写参数将会一直重试。
  

  

<强> stop_max_attempt_number :在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次
  

        @retry (stop_max_attempt_number=5)   def run ():   打印(“开始重试”)   提高NameError      if __name__==癬_main__”:   run ()      

强调总次数。
  

  

<强> stop_max_delay :最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数,最大调用时间,默认为100毫秒
  

        从进口重试重试   @retry (stop_max_delay=5000)   def run ():   打印(“开始重试”)   提高NameError   if __name__==癬_main__”:   run ()      

会重试5秒钟,强调总时间。
  

  

<强> wait_fixed :两次调用方法期间停留时长,如果出现异常则会一直重复调用,默认1000毫秒
  

        从进口重试重试   @retry (wait_fixed=2000)   def run ():   打印(“开始重试”)   提高NameError   if __name__==癬_main__”:   run ()      

强调间隔时间。
  

  

<强> wait_random_min :在两次调用方法停留时长,停留最短时间,默认为0
  

  

<强> wait_random_max :在两次调用方法停留时长,停留最长时间,默认为1000毫秒
  

  

<强> wait_incrementing_increment :每调用一次则会增加的时长,默认100毫秒
  

  

<强> wait_exponential_multiplier和wait_exponential_max :以指数的形式产生两次重试之间的停留时间,产生的值为2 ^ previous_attempt_number * wait_exponential_multiplier previous_attempt_number是前面已经重试的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个重试之间的停留值都为wait_exponential_max
  

  

<强> retry_on_exception :指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出

        从进口重试重试   def run2(异常):   返回isinstance(例外,ZeroDivisionError)   @retry (retry_on_exception=run2)   def run ():   打印(“开始重试”)   一个=1/0   if __name__==癬_main__”:   run ()      

<强> retry_on_result :指定一个函数,如果指定的函数返回真,则重试,否则抛出异常退出
  

        从进口重试重试   def run2 (r):   返回isinstance (r, int)   @retry (retry_on_result=run2)   def run ():   打印(“开始重试”)   一个=1   返回一个   if __name__==癬_main__”:   run ()

python重试模块的使用方法详解