南强小屋 Design By 杰米
在应用中,有时候会 依赖第三方模块执行方法,比如调用某模块的上传下载,数据库查询等操作的时候,如果出现网络问题或其他问题,可能有超时重新请求的情况;
目前的解决方案有
1. 信号量,但不支持window;
2.多线程,但是 如果是大量的数据重复操作尝试,会出现线程管理混乱,开启上万个线程的问题;
3.结合采用 eventlet 和 retrying模块 (eventlet 原理尚需深入研究)
下面的方法实现:超过指定时间重新尝试某个方法
# -*- coding: utf-8 -*-
import random
import time
import eventlet
from retrying import retry
eventlet.monkey_patch()
class RetryTimeOutException(Exception):
def __init__(self, *args, **kwargs):
pass
def retry_if_timeout(exception):
"""Return True if we should retry (in this case when it's an IOError), False otherwise"""
return isinstance(exception, RetryTimeOutException)
def retry_fun(retries=3, timeout_second=2):
"""
will retry ${retries} times when process time beyond ${timeout_second} ;
:param retries: The retry times
:param timeout_second: The max process time
"""
def retry_decor(func):
@retry(stop_max_attempt_number=retries, retry_on_exception=retry_if_timeout)
def decor(*args, **kwargs):
print("In retry method..")
pass_flag = False
with eventlet.Timeout(timeout_second, False):
r = func(*args, **kwargs)
pass_flag = True
print("Success after method.")
if not pass_flag:
raise RetryTimeOutException("Time out..")
print("Exit from retry.")
return r
return decor
return retry_decor
def do_request():
print("begin request...")
sleep_time = random.randint(1, 4)
print("request sleep time: %s." % sleep_time)
time.sleep(sleep_time)
print("end request...")
return True
@retry_fun(retries=3)
def retry_request():
r = do_request()
print(r)
if __name__ == '__main__':
retry_request()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无python超时重新请求解决方案的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。