Repolode
joerick

joerick/pyinstrument

Python 调用栈性能分析器,帮你找出代码慢在哪里,支持控制台与 HTML 等多种输出。

Star
8,026
Fork
302
未关闭 Issue
32
最近提交
6天前

这是什么?

Pyinstrument 是一个 Python 统计型性能分析器。它在程序运行时采样调用栈,然后列出耗时最多的函数,帮助你把优化精力集中在代码最慢的部分。

它提供命令行用法(`pyinstrument script.py`),也可以通过 Python API 的 `with` 语句或装饰器只分析某段代码。输出形式包括控制台文本、可交互的 HTML、JSON、pstats 以及 speedscope 格式。对异步代码,它会显示协程中 await 等待所花的时间;还提供 Django 中间件、IPython/Jupyter 魔法命令以及 FastAPI、aiohttp 的示例。

默认情况下,它会隐藏第三方库的调用帧,并高亮显示你自己的应用代码,让输出聚焦在可控的部分。

核心功能

  • 01以较低开销采样调用栈,统计每个函数的耗时。
  • 02支持控制台、可交互 HTML、JSON、pstats 和 speedscope 等输出格式。
  • 03支持异步代码分析,能把 await 等待的时间归到正确的调用上。
  • 04既可从命令行分析整个脚本,也可用 `with` 语句或装饰器分析指定代码块。
  • 05提供 Django 中间件和 IPython/Jupyter 魔法命令的集成。
  • 06默认隐藏库代码的调用帧,让应用代码更醒目。

适用场景

  • 找出运行缓慢的 Python 脚本中耗时最多的函数。
  • 分析 Django 视图或中间件,看请求时间花在哪里。
  • 排查异步代码中任务长时间等待 I/O 的问题。
  • 在 Jupyter 中直接查看某个 notebook 单元格的性能。

快速上手

  1. 1

    从 PyPI 安装 pyinstrument

    pip install pyinstrument
  2. 2

    从命令行分析脚本

    pyinstrument script.py

使用前须知

  • README 提到在 Docker 容器中分析代码可能得到异常结果,因为计时系统调用较慢。
  • 使用 pyinstrument 运行含 pickle 序列化类的脚本时,可能因 `__main__` 无法识别而出错。

收录于专题

标签

常见问题

pyinstrument 是什么?
Python 调用栈性能分析器,帮你找出代码慢在哪里,支持控制台与 HTML 等多种输出。 Pyinstrument 是一个 Python 统计型性能分析器。它在程序运行时采样调用栈,然后列出耗时最多的函数,帮助你把优化精力集中在代码最慢的部分。
pyinstrument 可以免费使用吗?用的什么许可证?
pyinstrument 以 BSD-3-Clause 许可证开源。用于商业产品前,请先确认许可证条款。
pyinstrument 还在维护吗?
活跃维护中。pyinstrument 最近一次提交是在 2026年11月1日。
pyinstrument 适合用来做什么?
找出运行缓慢的 Python 脚本中耗时最多的函数。 分析 Django 视图或中间件,看请求时间花在哪里。 排查异步代码中任务长时间等待 I/O 的问题。 在 Jupyter 中直接查看某个 notebook 单元格的性能。
pyinstrument 怎么安装和运行?
从 PyPI 安装 pyinstrument: pip install pyinstrument 从命令行分析脚本: pyinstrument script.py
在哪里获取 pyinstrument?
源代码和安装说明在 GitHub 上:https://github.com/joerick/pyinstrument

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目