问题 在Python中测量性能


我正在用Python编写一个Web应用程序,我还没有决定是否要使用Flask,web.py或其他东西,我希望能够在实时应用程序上进行配置文件。

似乎很少有关于如何实施仪器来进行性能测量的信息,而不是在任何地方做很多打印datetime.now()。

有关检测Python应用程序的最佳方法是什么,以便进行良好的测量。我想我正在寻找类似于Stackoverflow团队mvc-mini-profiler的东西。


10282
2018-06-21 17:50


起源

docs.python.org/library/profile.html - Wooble
我不太喜欢按照标准配置文件的方式完成各个功能的分析。如果您希望应用程序在某个时刻终止,那么它似乎最有用。我确实看到如何使用装饰器优雅地完成它,所以也许值得研究编写一些测试。 - Simon


答案:


您可以简单地运行Python附带的cProfile工具:

python -m cProfile script.py

当然,您必须创建script.py文件,该文件将执行您要测试的代码部分。如果你有一些单元测试,你也可以使用它。

或者你使用:

import cProfile 
cProfile.run('foo()')

从中分析它 foo 入口点。


6
2018-06-21 18:27



我真的更喜欢在函数中使用探查器代码,而不是在分析器中“包装”该函数。它也不会使部分应用程序的分析变得更难吗? - Simon
事实证明,尽管我不愿意使用标准分析器,但这是正确答案,但只需稍作修改即可。有人这样写道: mg.pov.lt/profilehooks 它允许您将装饰器添加到要分析的功能。它并不完美,因为它无法收集像Stackoverflow mvc profiler那样的所有东西,但我想这是一些更通用的东西的代价。 - Simon
感谢您的评论,我不知道profilehooks。干杯 - rafalotufo


Amir Salihefendic写了一篇短片(150 LOC) RequestProfiler,这篇博客文章中描述了:

我没有尝试过,但由于它是一个WSGI中间件,它应该是可插拔的。


4
2018-06-21 17:56



看起来很有趣,可能有点受限,我真的不明白它是如何设法跟踪数据库和memcache查询的,但它看起来像是一种定位瓶颈的快捷方法。 - Simon
我自己没有看过这个来源 - 我相信作者;)但是,我希望其他答案出现在这个问题上,因为我自己对这个话题感兴趣(也许问题标题可以更集中于WSGI)分析)。 - miku
它并不意味着是WSGI分析。我实际上并不关心只有WSGI的解决方案,我不能为web和普通应用程序使用相同的工具。 - Simon


您可以使用通用的Web应用程序性能工具,例如 httpperf。这适用于使用外部客户端并适用于任何框架,因为它适用于标准接口(HTTP)。因此,它测试完整的堆栈性能。


0
2018-06-21 19:35



但它不会告诉我时间花在哪里,只是给定的http查询很慢。 - Simon
但是会帮助你比较你似乎暗示你想要做的框架性能。否则,您可以使用您说您实际上不想出于某种原因使用的分析工具。 - Keith
可能这是我在讨论网页框架工作时的错误,它的意思是“我想要支持任何框架的东西”。我不想使用标准的Python分析器,因为它似乎不是你想在生产系统中不断运行的东西,而是在部署之前用来衡量性能的更多东西。 - Simon


使用 新遗物免费监控系统。您只需在服务器上安装代理并指向烧瓶即可 在里面.py文件。使用正确的代理设置运行应用程序后,您将开始查看应用程序指标,请参阅New Relic的名为APM的在线仪表板。 默认情况下,它会显示应用程序吞吐量(QPS / RPM),应用程序响应时间,最高事务,错误率,错误堆栈跟踪(如果有的话)(例如500错误),调用外部服务等图表。此外,您还可以监控你的系统统计数据。


0
2017-10-11 05:40