栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在python请求库中实现重试机制?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在python请求库中实现重试机制?

通过扩展

requests.Session
类,我可以获得所需的可靠性。

这是代码https://bitbucket.org/bspeakmon/jira-
python/src/a7fca855394402f58507ca4056de87ccdbd6a213/jira/resilientsession.py?at=master

编辑 该代码是:

from requests import Sessionfrom requests.exceptions import ConnectionErrorimport loggingimport timeclass ResilientSession(Session):    """    This class is supposed to retry requests that do return temporary errors.    At this moment it supports: 502, 503, 504    """    def __recoverable(self, error, url, request, counter=1):        if hasattr(error,'status_pre'): if error.status_pre in [502, 503, 504]:     error = "HTTP %s" % error.status_pre else:     return False        DELAY = 10 * counter        logging.warn("Got recoverable error [%s] from %s %s, retry #%s in %ss" % (error, request, url, counter, DELAY))        time.sleep(DELAY)        return True    def get(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).get(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'GET', counter):     continue return r    def post(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).post(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'POST', counter):     continue return r    def delete(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).delete(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'DELETE', counter):     continue return r    def put(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).put(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'PUT', counter):     continue return r    def head(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).head(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'HEAD', counter):     continue return r    def patch(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).patch(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'PATCH', counter):     continue return r    def options(self, url, **kwargs):        counter = 0        while True: counter += 1 try:     r = super(ResilientSession, self).options(url, **kwargs) except ConnectionError as e:     r = e.message if self.__recoverable(r, url, 'OPTIONS', counter):     continue return r


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571054.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号