美文网首页
利用requests的HTTPAdapter重试机制,检测web

利用requests的HTTPAdapter重试机制,检测web

作者: 逐风细雨 | 来源:发表于2020-08-31 17:27 被阅读0次

    当我们需要对web服务器,进行监控时,常用的做法时调用服务器的心跳接口,或者把某个轻量化的接口,当成是心跳接口使用。在项目上需要监控某个服务器状态,开发又没有设计心跳接口,因此调用一个简单的接口,通过判断响应码是否为200来判断服务器状态。
    判断的逻辑是:发送间隔5秒,连接超时5秒,超过4个周期未能获取到响应,测打印心跳检测失败。requests模块为常用的http请求模块,K神的开山之作,几行代码实现http请求。网上的知识点很多,今天讲几个脚本中用的知识点。
    1.发送和接收超时,在请求中增加一个timeout参数,传一个数时,表示发送超时,转一个2个数值的列表时,第一个元素表示发送超时,第二个元素表示接收完成超时。如果不设置超时,超时是tcp默认超时,会卡很久。
    2.超时后进行重试。如果是单个请求,我们可以在每个请求捕获超时写个循环重试一下,但当有多个请求的时候,显得不够优雅。requests.adapters.HTTPAdapter 的对象 ,可以设置最大的重试次数(实际发送次数为重试次数加1)
    实践的代码如下:

    # -*- coding:utf-8 -*-
    # @Time      :2020/7/31
    # 检测http响应码是否为200判断web服务器是否可用
    # 检测周期5秒
    import time
    import requests
    from loguru import logger
    from requests.adapters import HTTPAdapter
    import threading
    
    logger.add('heart.log')
    
    # 设置3次重试
    session = requests.Session()
    session.mount('http://', HTTPAdapter(max_retries=3))
    
    
    def get_func(host):
        try:
            # 发送超时5秒,接收完成超时10
            rsp = session.get(f'http://{host}/api/heart.json', timeout=(5, 10))
            if rsp.status_code == 200:
                return True
            else:
                logger.error(f'{host}心跳检测失败:{rsp.text}')
                return False
        except requests.exceptions.RequestException as e:
            logger.error(f'{host}重试3次后仍未成功{e}')
            return False
    
    
    def check_heart(host):
        logger.info(f'开始检测服务器{host}')
        while 1:
            if get_func(host):
                # logger.info(f'{host}检测成功')
                pass
            time.sleep(5)
    
    
    if __name__ == "__main__":
        host_list = ['192.168.54.109', '192.168.54.108']
        job_list = []
        for host in host_list:
            job_list.append(threading.Thread(target=check_heart, args=(host,)))
        for job in job_list:
            job.start()
        for job in job_list:
            job.join()
    
    

    相关文章

      网友评论

          本文标题:利用requests的HTTPAdapter重试机制,检测web

          本文链接:https://www.haomeiwen.com/subject/jbysrktx.html