如何在Python中分析多线程程序?

rog*_*rog 60 python multithreading profiling

我正在使用Python开发一个固有的多线程模块,我想知道它在哪里花费时间.cProfile似乎只是描述主线程.有没有办法分析计算中涉及的所有线程?

小智 37

请参阅yappi(Yet Another Python Profiler).

  • 有人记录吗?如何对结果进行排序以检索前10位总时间消费者? (4认同)
  • @velis:您可以使用 pip:`pip install yappi`。 (3认同)
  • 您为什么不扩展答案并提供示例? (2认同)

var*_*tec 19

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

  • 实际上你只需要修改Thread.run()方法. (3认同)
  • 1)分析只是显示时间,未激活的CPU时间(尽量cProfile.run("time.sleep(3)"); 2)Stats.add()不是数以千计的电话很方便(容易跑出来的fd ,开始时打印的1000行)3)线程创建的开销是〜1000的因子 (2认同)

DNS*_*DNS 7

如果您可以做一些额外的工作,可以编写自己的实现类的概要分析类profile(self, frame, event, arg)。每当调用函数时都会调用该方法,您可以相当容易地设置一个结构以从中收集统计信息。

然后,您可以threading.setprofile用来在每个线程上注册该功能。调用该函数时,您可以threading.currentThread()用来查看它正在运行。更多信息(和现成的配方)在这里:

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

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