写Python代码时,你有没有过这种崩溃时刻?
明明代码能跑通,但运行起来巨慢——循环卡半天、接口响应超时、脚本执行动辄几分钟,却不知道问题出在哪个函数、哪行代码。
用print打印耗时?太繁琐,还容易漏关键环节;
用cProfile?输出一堆杂乱数据,新手看着头皮发麻,根本抓不住重点。
今天就给大家安利一款Python性能分析工具—pyinstrument,采样式分析+直观可视化,不用复杂配置,一键找到代码里的“耗时元凶”!

比起传统的性能分析工具,pyinstrument的核心优势就是「轻量、直观、低侵入」,完全适配日常开发场景:
打开终端/命令行,输入以下命令,等待几秒即可安装完成:
pip install pyinstrument如果需要分析Web应用(比如Flask/Django),可以直接安装适配版本:
#适配Flaskpip install pyinstrument[flask]#适配Djangopip install pyinstrument[django]pyinstrument的用法非常灵活,根据你的需求选对应的方式即可。
用法1:命令行直接分析整个脚本
适合分析单独的Python脚本(比如test.py),无需修改代码,直接在终端输入命令:
pyinstrument 你的脚本名.py举个例子,假设你有一段测试代码test.py:
import time# 耗时函数1def slow_function(): time.sleep(1) # 模拟耗时操作 total = 0 for i in range(1000000): total += i return total# 耗时函数2def fast_function(): time.sleep(0.2)# 主函数def main(): slow_function() fast_function()if __name__ == "__main__": main()执行命令 pyinstrument test.py,会直接输出分析结果,重点一目了然:
_ ._ __/__ _ _ _ _ _/_ Recorded: 12:00:00 Samples: 100 /_//_/// /_\ / //_// / //_'/ // Duration: 1.203 CPU time: 0.004/ _/ v4.5.1Program: test.py1.203 <module> test.py:1└── 1.203 main test.py:14 ├── 1.001 slow_function test.py:4 # 核心瓶颈! │ ├── 1.000 sleep time.py:1 │ └── 0.001 <genexpr> test.py:7 └── 0.202 fast_function test.py:10 └── 0.202 sleep time.py:1能清晰看到:总耗时1.203秒,slow_function 占了1.001秒,是主要的性能瓶颈,甚至能看到函数里哪一行最耗时(这里是sleep操作)。
用法2:代码内嵌入,分析指定代码段
如果不想分析整个脚本,只想定位某一段代码(比如某个函数、某段循环),可以用代码嵌入的方式,灵活又精准。
示例代码:
import timefrom pyinstrument import Profiler # 导入分析器def slow_function(): time.sleep(1) total = 0 for i in range(1000000): total += i return totaldef fast_function(): time.sleep(0.2)if __name__ == "__main__": # 1. 初始化分析器 profiler = Profiler() # 2. 开始分析(只分析下面的代码段) profiler.start() # 待分析的代码(可自由替换) slow_function() fast_function() # 3. 停止分析 profiler.stop() # 4. 打印结果(文本格式) profiler.print() # 可选:输出HTML报告(更美观,打开就能看) # profiler.write_html("性能报告.html")运行后,不仅会在终端输出结果,还能生成HTML报告(注释掉的那行解开即可),用浏览器打开,排版更清晰,还能折叠/展开调用链,适合复杂代码分析。
用法3:分析Web应用(以Flask为例)
做Web开发时,接口响应慢是常有的事,pyinstrument可以直接集成到Flask/Django中,分析每一个接口的耗时。
Flask集成示例:
from flask import Flaskfrom pyinstrument.middleware import PyInstrumentMiddleware # 导入中间件app = Flask(__name__)# 关键:添加pyinstrument中间件(一行集成)app.wsgi_app = PyInstrumentMiddleware(app.wsgi_app)# 测试接口@app.route('/')def index(): time.sleep(0.5) # 模拟接口耗时操作 return "Hello, pyinstrument!"if __name__ == "__main__": app.run(debug=True)运行项目后,访问接口 http://localhost:5000/__debug__/profiler/,就能看到所有接口的性能报告,清晰展示每个接口、每个函数的耗时,快速定位接口瓶颈(比如数据库查询、循环处理)。
profiler.print(filter_filename_patterns=[r"你的项目路径"])
过滤掉系统自带的函数,只显示自己的代码。
pyinstrument最大的亮点就是简单、高效,不用懂复杂的性能分析原理,不用配置繁琐的参数就能快速找到Python代码的性能瓶颈。无论是新手调试脚本,还是老手优化Web接口、异步代码,它都能轻松胜任,比cProfile更友好,比print更专业。赶紧安装试试吧,从此和“代码跑太慢”说再见!
Streamlit:3 分钟搞定 Python Web 的终极工具,前端小白也能秒会!