牛逼坏了!大神教你Python 接口优化,性能提升25倍!

文章讲述了通过Chrome的Network分析和Profile火焰图进行Python接口性能优化的过程。首先,通过分析发现接口优化主要在于后端,通过减少线程创建和销毁、改变功能设计减少了响应时间。接着,优化了Mysql操作,利用OR语法减少数据库查询次数,进一步提高性能。最后,通过调整代码逻辑减少GetAttr的执行频率,达到1.47s的响应时间,实现了性能的显著提升。
摘要由CSDN通过智能技术生成

背景

我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指
在这里插入图片描述
让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了。

投石问路

既然是网站的响应问题,可以通过 Chrome 这个强大的工具帮助我们快速找到优化方向。
通过 Chrome 的 Network 除了可以看到接口请求耗时之外,还能看到一个时间的分配情况,选择一个配置没有那么多的项目,简单请求看看:
在这里插入图片描述
虽然只是一个只有三条记录的项目,加载项目设置都需要 17s,通过 Timing, 可以看到总的请求共耗时 17.67s ,但有 17.57s 是在 Waiting(TTFB) 状态。

TTFB 是 Time to First Byte 的缩写,指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要指标。

Profile 火焰图 + 代码调优

那么大概可以知道优化的大方向是在后端接口处理上面,后端代码是 Python + Flask 实现的,先不盲猜,直接上 Profile:
在这里插入图片描述
第一波优化:功能交互重新设计
说实话看到这段代码是绝望的:完全看不出什么?只是看到很多 gevent 和 Threading,因为太多协程或者线程?
这时候一定要结合代码来分析(为了简短篇幅,参数部分用 “…” 代替):

def get_max_cpus(project_code, gids):
    """
    """
    ...
    # 再定义一个获取 cpu 的函数
    def get_max_cpu(project_setting, gid, token, headers):
        group_with_machines = utils.get_groups(...)
        hostnames = get_info_from_machines_info(...)
        res = fetchers.MonitorAPIFetcher.get(...)
        vals = [
            round(100 - val, 4)
            for ts, val in res['series'][0]['data']
            if not utils.is_nan(val)
        ]
        max_val = max(vals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值