我怎样才能剖析Python中的multithreading程序?

我正在Python中开发一个固有的multithreading模块,我想知道它在哪里花费时间。 cProfile似乎只是configuration主线程。 是否有任何方法来分析计算中涉及的所有线程?

请参阅yappi (另一个Python Profiler)。

而不是运行一个cProfile ,你可以在每个线程中运行单独的cProfile实例,然后合并统计信息。 Stats.add()会自动执行此操作。

如果你可以做一些额外的工作,你可以编写你自己的configurationprofile(self, frame, event, arg)类来实现profile(self, frame, event, arg) 。 只要调用一个函数就可以调用这个函数,并且可以很容易地设置一个结构来从中收集统计信息。

然后可以使用threading.setprofile在每个线程上注册该函数。 当函数被调用时,你可以使用threading.currentThread()来查看它运行的是哪一个。 更多信息(和准备运行的配方)在这里:

http://code.activestate.com/recipes/465831/

http://docs.python.org/library/threading.html#threading.setprofile

鉴于你的不同线程的主要function不同,你可以从这里使用非常有用的profile_func()装饰器。

我不知道任何支持python的分析应用程序 – 但是你可以编写一个Trace-class来写入日志文件,你可以在其中input操作何时开始,什么时候结束,以及多less时间消耗。

这是一个简单快捷的解决scheme。