作家
登录

Python中异常重试解决方案

作者: 来源: 2017-06-01 13:32:21 阅读 我要评论

"Broken sauce, everything is hosed!!!111one"
  •  
  •  
  •     else
  •  
  •  
  •         return "Awesome sauce!" 
  •  
  •  
  •   
  •  
  •  
  • print do_something_unreliable() 
  • 如不雅我们运行 haveatry 函数,那么直到 random.randint 返回 5,它才会履行停止,不然会一向从新履行。

    retry 还可以接收一些参数,这个大年夜源码中 Retrying 类的初始化函数可以看到可选的参数:

    • stopmaxattempt_number:用来设定最大年夜的测验测验次数,跨越该次数就停止重试
    • stopmaxdelay:比瘸黎置成 10000,那么大年夜被装潢的函数开端履行的时光点开端,到函数成功运行停止或者掉败报错中断的时光点,只要这段时光跨越 10 秒,函数就不会再履行了
    • wait_fixed:设置在两次 retrying 之间的逗留时光
    • waitrandommin 和 waitrandommax:用随机的方法产生两次 retrying 之间的逗留时光
    • waitexponentialmultiplier 和 waitexponentialmax:以指数的情势产生两次 retrying 之间的逗留时光,产生的值为 2^previousattemptnumber * waitexponentialmultiplier,previousattemptnumber 是前面已经 retry 的次数,如不雅产生的┞封个值跨越了 waitexponentialmax 的大年夜小,那么之后两个 retrying 之间的逗留值都为 waitexponentialmax。这个设计逢迎了 exponential backoff 算法,可以减轻壅塞的情况。

    我们可以指定要在出现哪些异常的时刻再去 retry,这个要用 retryonexception 传入一个函数对象:

    1. def retry_if_io_error(exception): 
    2.  
    3.  
    4.     return isinstance(exception, IOError) 
    5.  
    6.  
    7.   
    8.  
    9.  
    10. @retry(retry_on_exception=retry_if_io_error) 
    11.  
    12.  
    13. def read_a_file(): 
    14.  
    15.  
    16.     with open("file""r"as f: 
    17.  
    18.  
    19.         return f.read() 

    在履行 readafile 函数的过程中,如不雅报出异常,那么这个异常会以形参 exception 传入 retryifio_error 函数中,如不雅 exception 是 IOError 那么就进行 retry,如不雅不是就停止运行并抛出异常。

    我们还可以指定要在获得哪些结不雅的时刻去 retry,这个要用 retryonresult 传入一个函数对象:

    1. def retry_if_result_none(result): 
    2.  
    3.  
    4.     return result is None 
    5.  
    6.  
    7.   
    8.  
    9.  
    10. @retry(retry_on_result=retry_if_result_none) 
    11.  
    12.  
    13. def get_result(): 
    14.  
    15.  
    16.     return None 

    其他相干材料:

    • https://pypi.python.org/pypi/retry/
    • https://julien.danjou.info/blog/2015/python-retrying
    • https://github.com/rholder/retrying

    【编辑推荐】

    1. 深刻Python列表的内部实现
    2. 应用Python供给高机能计算办事
    3. 深刻懂得GIL:若何写出高机能及线程安然的Python代码
    4. Python算法拭魅战系列:栈

        推荐阅读

        PHP哈希表碰撞攻击原理

      比来哈希表碰撞进击(Hashtable collisions as DOS attack)的话题赓续被提起,各类说话纷纷中招。本文结合PHP内核源码,聊一聊┞封种进击的道理及实现。[3] 经由过程构造Hash冲突实现各类>>>详细阅读


      本文标题:Python中异常重试解决方案

      地址:http://www.17bianji.com/lsqh/35522.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)