Idea - Flask Profiler
在豆瓣工作的时候,每个豆瓣开发者都能在 web 界面上看到 profile log。 这对于查找瓶颈,分析性能很有帮助。
跳出豆瓣的技术栈后,一直并没有找到符合心目中理想的 Profiler,特别是对 Flask。
Werkzeug 提供了一个 WSGI Middleware,可以把报告按照请求输出到日志或目录。
我希望的性能报告可以比这个工具更灵活,它可以分析任何可以分析的东西(例如数据库记录,缓存读取等等), 又可以有各种输出方式。
考虑了下实现,我觉得以日志作为中间存储是个不错的选择: 在想要做性能分析的模块中打印一些日志,在请求响应时执行日志输出的逻辑。
它的实现见 github.
预设的功能有:
- 输出一次请求的所有函数调用(cProfile)
- 输出一次请求的所有数据库调用(SQLAlchemy)
- 可以选择输出到 HTML 的底部
- 可以选择作为 JSON 响应对象的一个字段 输出
当然,这个 Profiler 的写法是很容易扩展的(至少我是这么认为的)。
然而,我还不确定这个库的功能是否强壮,也还缺失一份文档。 在足够稳定后,我会将它发布到 PYPI.
感谢一下库提供了实现思路: