python脚本请求数量达到上限,http请求重试问题

 更新时间:2024年06月27日 09:54:05   作者:拾牙慧者  
这篇文章主要介绍了python脚本请求数量达到上限,http请求重试问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python请求数量达到上限,http请求重试

由于在内网发送http请求同一个token会限制次数,所以很容易达到网关流量上限。

业务中使用了多线程并发,一个线程发起一次http请求,得到正确结果后返回。

这里采用的策略是,如果解析出来达到流量上限,那么该线程休眠一段时间,然后重试请求,如果还是失败,那么继续休眠,每次休眠的时间随着重试轮次增加:

# 探测是否触及网关流量上限
def probe_func(m_url, m_headers, m_json, m_timeout):
    json_rep = requests.post(url = m_url, 
                    headers = m_headers,
                    json = m_json,
                    timeout = m_timeout)
    zhiyan_data = json_rep.json()
    if(zhiyan_data['code'] != 0):
        return None
    else:
        return json_rep

# 解析数据包,不涉及probe_func中的检测内容
def parse(json_rep, room_name, metric_name):
    if json_rep == None: 
        logging.info(room_name + " json_rep == None")
        return 0
    if (json_rep.content and json_rep.status_code != 204 and json_rep.headers["content-type"].strip().startswith("application/json")):
        zhiyan_data = json_rep.json()
        if len(zhiyan_data['data']) == 0:
            logging.warning(zhiyan_data['日志信息拉取无结果'])
            return 0
        else:
            res = zhiyan_data['data']['chart_info'][0]['key_data_list'][3]['current']
            logging.info(room_name + str(res))
            if str(res) == "None":
                logging.warning(room_name + ":拉取zhiyan_data:" + metric_name + " 出现了问题,拉取数据为None")
                return 0
            else:
                return res
    else:
        return 0

# 具有可靠性地获取数据
def request_post_reliable(m_url, m_headers, m_json, m_timeout):
    sleep_time_s = 1
    sleep_time_max = 60
    res = probe_func(m_url, m_headers, m_json, m_timeout)
    # 如果探测失败则线程睡眠一段时间后再尝试
    while (res == None):
        logging.info("探测失败,线程睡眠"+str(sleep_time_s)+"秒")
        time.sleep(sleep_time_s)
        tmp = sleep_time_s * 2
        if tmp < sleep_time_max:
            sleep_time_s = tmp
        else:
            sleep_time_s = sleep_time_max
        logging.info("睡眠结束,线程重新探测")
        res = probe_func(m_url, m_headers, m_json, m_timeout)
    # 直到探测成功,返回正确结果
    return res 

python请求http/https时设置失败重试次数

使用Python的requests库时,默认是没有失败时重试请求的,通过下面的方式可以支持重试请求

设置请求时的重试规则

import requests
from requests.adapters import HTTPAdapter

s = requests.Session()
a = HTTPAdapter(max_retries=3)
b = HTTPAdapter(max_retries=3)
#将重试规则挂载到http和https请求
s.mount('http://', a)
s.mount('https://', b)

请求Url

上面设置完毕后,通过改Session的请求就可以支持失败重试

r = s.get('http://api.map.baidu.com/geocoder?location=39.90733345,116.391244079988&output=json')
# 返回的状态码
r.status_code
# 响应内容,中文为utf8编码
r.content
# 响应的字符串形式,中文为unicode编码
r.text
# 响应头中的编码
r.encoding
# 响应头信息
r.headers

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python文件路径操作方法总结

    python文件路径操作方法总结

    在本篇文章里小编给大家整理的是一篇关于python文件路径操作方法总结内容,有需要的朋友们可以学习下。
    2020-12-12
  • python GUI图形化编程wxpython的使用

    python GUI图形化编程wxpython的使用

    这篇文章主要介绍了python GUI图形化编程wxpython的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 基于Python制作ASCII码转换器

    基于Python制作ASCII码转换器

    ASCII码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。本文将利用Python制作一个ASCII码转换器,感兴趣的可以动手试一试
    2022-02-02
  • Python Log文件大小设置及备份的方法

    Python Log文件大小设置及备份的方法

    这篇文章主要介绍了Python Log文件大小设置及备份的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • python_tkinter弹出对话框创建2

    python_tkinter弹出对话框创建2

    这篇文章主要介绍了python_tkinter弹出对话框创建,上以篇文章我们简单的对对话框创建做了简单介绍,本文将继续更多相关内容,需要的小伙伴可以参考一下
    2022-03-03
  • 基于python+selenium自动健康打卡的实现代码

    基于python+selenium自动健康打卡的实现代码

    这篇文章主要介绍了基于python+selenium自动健康打卡,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 深度解析Python中递归下降解析器的原理与实现

    深度解析Python中递归下降解析器的原理与实现

    在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-08-08
  • PyTorch中的参数类torch.nn.Parameter()详解

    PyTorch中的参数类torch.nn.Parameter()详解

    这篇文章主要给大家介绍了关于PyTorch中torch.nn.Parameter()的相关资料,要内容包括基础应用、实用技巧、原理机制等方面,文章通过实例介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Python中xrange与yield的用法实例分析

    Python中xrange与yield的用法实例分析

    这篇文章主要介绍了Python中xrange与yield的用法,结合实例形式较为详细的分析了range和xrange功能、使用方法与相关注意事项,需要的朋友可以参考下
    2017-12-12
  • Python代码风格与编程习惯重要吗?

    Python代码风格与编程习惯重要吗?

    实现高内聚,低耦合、结构清晰不臃肿、可读性高、数据冗余性低、高复用、易扩展的代码,并非易事.上到设计模式,下到某个类、方法、函数的构造.在这里我分享一下我自己的代码设计,编写风格,让我们互相学习,需要的朋友可以参考下
    2021-06-06

最新评论