python--requests模块优化接口调用

本文介绍了如何通过使用requests的Session对象实现长连接来优化大量HTTP接口调用的效率。在优化前的示例中,调用接口耗时9分钟3秒,而采用长连接后,时间减少到3分钟21秒。由于上游系统的keep-alive超时限制,长时间运行的程序将获得更大的效率提升。这种方法降低了TCP连接的握手和挥手次数,减轻了服务端压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Python进行网络编程时,常使用requests模块进行http接口调用。如果只是很少的接口调用,使用常规的requests.post()requests.get() 就可以满足要求。但是如果涉及到很多次接口调用,那可能会遇到程序执行时间长的效率问题。为提高程序执行效率,降低服务端压力,可以考虑的一个思路是使用长连接,节省频繁的tcp连接握手和挥手的过程。

PS:处于信息敏感,url做了屏蔽

优化前

def q_inst(obj_id='host', field='bk_host_innerip', value=''):
	headers = {"Content-Type": "application/json"}
    data = {
        "bk_obj_id": obj_id,
        "bk_supplier_account": "0",
        "page": {
            "start": 0,
            "limit": 10
        },
        "condition": {
            obj_id: [{
                "field": field,
                "operator": "$eq",
                "value": value
            }]
        }
    }
    res_p = requests.post('https://***.***.***/api/c/compapi/v2/cc/search_inst/', data =data, headers = headers)
    return res_p


if __name__ == '__main__':
	for in range(4001):
		res = q_inst(value='10.1.1.1')
#################output##########################
查询蓝鲸接口共耗时:0:09:03.148451

优化后

def keep_alive():
    """
    实例化一个长连接对象
    :return:
    """
    s = requests.Session()
    return s

def q_inst(func, obj_id='host', field='bk_host_innerip', value=''):
	headers = {"Content-Type": "application/json"}
    data = {
        "bk_obj_id": obj_id,
        "bk_supplier_account": "0",
        "page": {
            "start": 0,
            "limit": 10
        },
        "condition": {
            obj_id: [{
                "field": field,
                "operator": "$eq",
                "value": value
            }]
        }
    }
    res_p = func.post('https://***.***.***/api/c/compapi/v2/cc/search_inst/', data = data, headers = headers)
    return res_p


if __name__ == '__main__':
	s = keep_alive()
	for in range(4001):
		res = q_inst(s, value='10.1.1.1')	
#################output##########################
查询蓝鲸接口共耗时:0:03:21.099682

总结
以上范例中,由于上下游系统的keep_alive超时限制是5秒,如果时间拉长的话,执行效率将进一步提升。

官方范例:

Basic Usage::

      >>> import requests
      >>> s = requests.Session()
      >>> s.get('https://httpbin.org/get')
      <Response [200]>

    Or as a context manager::

      >>> with requests.Session() as s:
      ...     s.get('https://httpbin.org/get')
      <Response [200]>
    """
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值