首页 > 编程知识 正文

python多线程实现,python类

时间:2023-05-04 18:38:15 阅读:174787 作者:309

在程序开发中,经常需要请求外部接口资源。 此外,每个要求都不一定成功。 因此,与这些网络请求相关联的代码片段必须添加重试机制。 介绍Python中的重试方法。

添加循环确定的最简单方法是将循环添加到需要重试的代码片段中,在程序中捕获异常,如果执行成功,则退出循环,如果执行失败,则重复执行相关代码。 例如:

importrequestsdefreq _ with _ retry (URL ) : retry_max=10 #最大重试次数为10次for i in range(1) 1, retry_max 1) : try :打印(第二个请求(.format(I ) ) #此处为ConnectTimeout异常RES=requests.get(URL, 无法抛出timeout=1) data ) breakexceptrequests.exceptions.connecttimeoutase : continue #不存在网址req _ with

因为请求了不存在的网址,所以正在重试,知道最大次数达到了10次。 但是,这样具有一定的代码入侵性,在业务逻辑中加入循环判断很不体面。 别着急,往下看,有更好的方法。

retrying retrying是Python的第三方库,它提供了当装饰业务函数执行失败时将重新执行的装饰函数retry。 缺省情况下,如果报告错误,将重试,直到执行成功。

可以使用pip install retrying进行安装。

例如,以下代码使用生成的随机数的大小来模拟业务的成功和失败。 如果生成的随机数大于2,则将视为失败,并重试,直到生成的随机数小于2。

importrandomfromretryingimportretry @ retrydefrandom _ with _ retry (3360 ifrandom.randint ) 0,10 ) 2: print (或更高)

在retry中,还可以在源代码中Retrying类的初始化函数中指定可选参数。

stop_max_attempt_number :最大重试次数。 如果超过此次数,则stop_max_delay :最大延迟时间(执行此方法重试的总时间),如果超过此时间,则停止wait_fixed。 两次retrying之间的等待时间wait_random_min和wait_random_max随机生成两次retrying之间的等待时间wait_incrementing_start的固定时间wait _ expexpon 按指数生成这次retrying之间的等待时间,生成值为2^previous_attempt_number的previous_attempt_number是之前retry的次数,该值为wait _ expones _ ner 需要特别注意的是接收函数的retry_on_exception参数,如下所示:

#判断为异常defis_myerror(exception ) : print )、exception (exception ) print ) isinstance ) exception,) ValueError、IOError、con ) ValueError,IOError, ConnectionError ) @ retry (retry _ on _ exception=is _ my error ) def random_with_retry ) : ' '随机从0到10,2 10 ) 2: print ) )大于2,重试.') (raise ValueError ) (大于2 ) )小于print ) random_with_retry ()

这里,retry_on_exception参数的大致思想是接收一个自定义函数is_MyError,在is_MyError函数中,ValueError,IOError,ConnectionError 如果random_with_retry ()函数抛出异常,则函数is_MyError ) )将确定返回的是True还是False,如果为True,则继续重试;如果为False,则立即停止并抛出异常。

还有retry_on_result参数,它接收用于确定业务函数返回哪些结果时需要重试的函数。 思想与retry_on_exception参数相似。

我们可以根据自己的需要合理组合这些参数以达到我们想要的效果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。