资讯专栏INFORMATION COLUMN

Python重试机制是什么,下文给大家解答

89542767 / 526人阅读


  小编写这篇文章的主要目的,主要是给大家讲解一下,关于Python机制的一些问题,比如重新调试的机制是什么呢?应用到它的场景还是很多的,下面跟小编一块去学习吧。


  介绍:


  为了避免网络问题出现的错误,比如网络延迟或者是宕机,往往都会出现请求超时的问题。


  这里要给大家介绍的是一个第三方库-Tenacity(标题中的重试机制并并不准确,它不是Python的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,喜欢记得收藏、关注、点赞。


  比如:


  在什么情况下才进行重试?


  重试几次呢?


  重试多久后结束?


  每次重试的间隔多长呢?


  重试失败后的回调?


  在使用它之前,先要安装它

  $pip install tenacity


  1.最基本的重试


  无条件重试,重试之间无间隔


   from tenacity import retry
   retry
  def test_retry():
  print("等待重试,重试无间隔执行...")
  raise Exception
  test_retry()


  无条件重试,但是在重试之前要等待2秒


  from tenacity import retry,wait_fixed
   retry(wait=wait_fixed(2))
  def test_retry():
  print("等待重试...")
  raise Exception
  test_retry()


  2.设置停止基本条件


  只重试7次


  from tenacity import retry,stop_after_attempt
   retry(stop=stop_after_attempt(7))
  def test_retry():
  print("等待重试...")
  raise Exception
  test_retry()


  重试10秒后不再重试


  from tenacity import retry,stop_after_delay
   retry(stop=stop_after_delay(10))
  def test_retry():
  print("等待重试...")
  raise Exception
  test_retry()


  或者上面两个条件满足一个就结束重试


  from tenacity import retry,stop_after_delay,stop_after_attempt
   retry(stop=(stop_after_delay(10)|stop_after_attempt(7)))
  def test_retry():
  print("等待重试...")
  raise Exception
  test_retry()


  3.设置何时进行重试


  在出现特定错误/异常(比如请求超时)的情况下,再进行重试
  from requests import exceptions
  from tenacity import retry,retry_if_exception_type
   retry(retry=retry_if_exception_type(exceptions.Timeout))
  def test_retry():
  print("等待重试...")
  raise exceptions.Timeout
  test_retry()


  在满足自定义条件时,再进行重试。


  如下示例,当test_retry函数返回值为False时,再进行重试


  from tenacity import retry,stop_after_attempt,retry_if_result
  def is_false(value):
  return value is False
   retry(stop=stop_after_attempt(3),
  retry=retry_if_result(is_false))
  def test_retry():
  return False
  test_retry()


  4.重试后错误重新抛出


  当出现异常后,tenacity会进行重试,若重试后还是失败,默认情况下,往上抛出的异常会变成RetryError,而不是最根本的原因。


  因此可以加一个参数(reraise=True),使得当重试失败后,往外抛出的异常还是原来的那个。


  from tenacity import retry,stop_after_attempt
   retry(stop=stop_after_attempt(7),reraise=True)
  def test_retry():
  print("等待重试...")
  raise Exception
  test_retry()


  5.设置回调函数


  当最后一次重试失败后,可以执行一个回调函数


  from tenacity import*
  def return_last_value(retry_state):
  print("执行回调函数")
  return retry_state.outcome.result()#表示返回原函数的返回值
  def is_false(value):
  return value is False
   retry(stop=stop_after_attempt(3),
  retry_error_callback=return_last_value,
  retry=retry_if_result(is_false))
  def test_retry():
  print("等待重试中...")
  return False
  print(test_retry())


  输出如下


  等待重试中...


  等待重试中...


  等待重试中...


  执行回调函数


  False


  至此,小编就为大家介绍到这里了,希望可以给各位读者带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127998.html

相关文章

  • Python获取线程返回值的三种方式分别什么下文大家解答

      小编写这篇文字的一个主要目的,主要是给大家解答关于python的一些相关事宜,主要涉及到内容是如何利用其python获取返回值,那么,返回值的三种方式分别是什么呢?具体的内容,下面就给大家详细的做出解答。  提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法。  方法一  使用全局变量的列表,来保存返回值 ...

    89542767 评论0 收藏0
  • Python必考五大面试题什么下文大家解答

      小编写这篇文章的一个主要目的,主要是来给大家做个介绍,介绍的内容主要是涉及到Python一些试题的讲解,小编给大家总结出来了五道必考的题目,大家可要仔细阅读哦,下面就给大家详细解答。  1、使用while循环实现输出2-3+4-5+6...+100的和  #方法一   #从2开始计算   i=2   #定义一个变量用于保存结果   sum=0   whilei<=100:   i...

    89542767 评论0 收藏0
  • Python numpy和matlab有什么区别?下文大家解答

      小编写这篇文章的主要目的,主要是给大家介绍关于Python numpy和matlab区别的介绍,具体区别,下文给大家详细的解答。  numpy和matlab的几点差异  Python numpy和matlab都是便捷灵活的科学计算语言,两者具有很多相似之处,但也有一些混淆的地方,这里假定你熟悉matlab,但不了解numpy,记录几个numpy实例:  1、Numpy数组索引指定开始和结束时 ...

    89542767 评论0 收藏0
  • Python代码引用模块方法什么?请仔细阅读下文

      小编写这篇文章的主要目的,主要是给大家来做一个解答,解答的内容是关于Python代码的事宜,将会教给大家如何使用Python去引用相关的模块,那么,具体的引用方法是什么呢?有什么技巧可言呢?下面就给大家详细解答下。  平时写的一些Python的代码,需要在其他模块里面复用。最粗狂的方法就是直接copy过去。  但这种方式太麻烦,copy一堆代码,导致代码量也很多。copy的也不爽。  下面就介...

    89542767 评论0 收藏0
  • Python pygame如何实现拼图游戏?下文大家解答

      Python pygame作为一门常见的技能,其实,它的应用范围还是比较的广泛的,那么,它是怎么实现其拼图游戏呢?下面就以案例的形式,去给大家做个解答,下面就给大家详细解答下。  pygame介绍  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shinners于20...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<