180、line_profiler 逐行耗时:找到真正慢的那一行,别凭直觉做性能优化 180、line_profiler 逐行耗时:找到真正慢的那一行,别凭直觉做性能优化上周帮一个团队排查线上接口超时问题,代码逻辑看起来没什么毛病——一个循环里调了三次数据库查询,每次查询都加了索引,按理说不会慢。直觉告诉我,可能是ORM的懒加载在作祟,或者某个关联查询没走索引。折腾了两个小时,加了各种日志,最后用line_profiler一跑,发现真正慢的居然是一行不起眼的字符串拼接——一个循环里反复用+拼接JSON字符串,数据量大了之后,Python的字符串不可变特性导致每次拼接都创建新对象,内存分配和拷贝成了瓶颈。这件事让我想起自己刚入行时,凭直觉优化代码踩过的坑:觉得循环慢就加缓存,觉得数据库慢就加索引,结果往往优化了不痛不痒的地方,真正的性能杀手藏在最不起眼的角落。line_profiler就是专门干这个的——它告诉你每一行代码到底花了多少时间,而不是让你猜。安装和基本用法line_profiler不是Python标准库,需要单独装。我习惯用pip安装,注意包名是line_profiler,不是cProfile或者profile,别搞混了。pipinstallline_profiler装完之后,你会得到一个命令行工具kern