当前位置: 首页 > 后端技术 > Python

Python包重试重复回调教程

时间:2023-03-26 01:40:48 Python

1.安装周期和重复回调我们会在很多场景中使用它,不仅仅是支付场景,我们需要通过重复回调和请求中了解用户的支付状态。如果请求失败,我们需要重新发起请求。防止请求异常导致数据丢失pipinstallretrying2.alwaysrequest如果我们想在代码遇到异常时回调直到成功在下面的方法中,我们直接访问了一个未定义的变量,肯定会跳到下面的Exception这个时候我们可以把这个错误写入日志,但是让程序继续执行这个方法,直到没有异常为止。因为这里模拟的是一定有异常,程序会一直返回回调,不间断循环fromretryingimportretry@retry()defsay():try:autofelixexceptExceptionase:#可以记录错误打印(e)raisesay()3.设置最大运行次数如果我们在请求中遇到异常,我们可以通过stop_max_attempt_number设置一个最大运行次数,当回调次数超过设定值时,回调将不再进行executed这里我们设置最大运行次数为5次从重试开始importretry@retry(stop_max_attempt_number=5)defsay():try:autofelixexceptExceptionase:#canbeErrorrecordlogprint(e)raisesay()4、设置最大重试时间可以通过stop_max_delay设置失败重试的最大时间,单位毫秒,超过时间,则从retrying停止重试importretry@retry(stop_max_delay=1000)defsay():try:autofelixexceptExceptionase:#错误可以日志中记录print(e)raisesay()5.设置间隔时间设置失败重试的间隔时间,单位毫秒减少重试回调频率importretry@retry(wait_fixed=1000)defsay():try:autofelixexceptExceptionase:#可以在日志中记录错误print(e)raisesay()六、设置随机间隔时间设置失败重试的随机间隔时间,以毫秒为单位可以使访问频率不均匀retryingimportretry@retry(wait_random_min=5000,wait_random_max=50000)defsay():try:autofelixexceptExceptionase:#可以在日志中记录错误print(e)raisesay()七、随机多次间隔时间可以可以通过设置wait_exponential_multiplier设置间隔时间乘数,可以通过设置wait_exponential_max从重试开始的最大间隔importretry@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)defsay():try:autofelixexceptExceptionase:#你可以logerrorsprint(e)raisesay()八、指定异常类型可以通过retry_on_exception设置指定。将重试指定的异常类型。如果不指定类型,会异常退出。如果wrap_exception参数设置为True,其他类型的异常重试importretrydefretry_error(exception):returnisinstance(exception,RetryError)#会重复调用@retry(etry_on_exception=retry_error)defsay():try:autofelixexceptRetryErrorase:raiseRetryError#只调用一次@retry(etry_on_exception=retry_error,wrap_exception=True)defsay():raiseException('a')say()九、filter回调可以设置retry_on_result指定需要回调哪些结果将请求结果放在retry_on_result的指定方法中进行过滤,如果返回None则继续回调,否则结束fromretryingimportretrydefretry_filter(result):print("thisisresult")returnresultisnotNone@retry(retry_on_result=retry_filter)defsay():print('重试永远忽略异常,如果返回值为None,则无需等待')returnNonesay(10.异常执行通过设置stop_func,每次抛出异常时执行的函数,如果与stop_max_delay和stop_max_attempt_number一起使用,则后两者无效。fromretryingimportretrydefstop_record(尝试,延迟):print("logging%d--->%d"%(attempts,delay))@retry(stop_max_delay=10,stop_func=stop_record)defsay():print("iamautofelix")raiseExceptionsay()以上就是本次分享的全部内容,想要的朋友们现在学习编程欢迎关注Python技术大本营获取更多技能教程。