2010-02-07 52 views
9

我想弄清楚如何在我的应用程序中测量几个python线程的性能。我目前有几个基于用户输入在不同线程上执行的任务,我想测量每个线程的执行时间,甚至是内存消耗。我试图使用cProfile(在线程的每个实例上,然后我将数据写入文件,然后汇总所有结果),并取得了有限的成功。另外,我还有一些阻塞IO的问题,这会影响我的结果。无论如何有效地分析我的应用程序?Python线程的剖析

+1

通过使用cProfile,你已经做了一个很好的开始!如果你可以用cProfile更详细地解释你的“有限的成功”,我们可以帮助解决这个问题并从那里继续。 – KushalP 2010-02-07 22:02:12

+0

作为一个无关的说明,您可能需要考虑多个进程而不是多个线程:http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp 2010-02-08 07:42:24

回答

3

有几种不同的方法来解决这个问题。 cProfile很棒,并附带Python,但很多人将多线程分析视为一个问题。解决这个问题的一种方法是对每个线程运行cProfile的单独实例,然后使用Stats.add合并结果。

如果没有你期望的那么有用,另一种方法是使用Yappi,我已经成功使用了几个特殊的多线程情况。它有很好的文档,所以你不应该有太多的麻烦设置它。

有关内存特定的性能分析,请查看Heapy。但是请注意,如果你的代码不好,它可能会创建一些你见过的最大的日志文件!

+0

我的系统是一个Web服务器,如果我使用'pr = cProfile.Profile() '在不同的请求中,是不是叫做** cProfile **的单独实例? – user3978288 2017-09-05 08:14:22