我怎样才能剖析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。