如何检查应用程序的哪个部分正在消耗CPU?

时间:2009-09-24 08:45:57

标签: python wxpython cpu-usage

我有一个wxPython应用程序,它有许多工作线程,空闲事件周期以及许多其他可以消耗CPU的事件处理代码,现在当应用程序没有进行交互时消耗大约8-10%的CPU。

问题:

是否有一个工具可以分辨我的应用程序的哪些部分/线程消耗大部分CPU?如果没有这样的通用工具,我愿意知道您通常采取的解决此类方案的方法吗?例如禁用部分应用,跟踪等

编辑:可能是我的问题的语言含糊不清,我不想知道我的代码中的哪个函数或代码块占用了大部分资源,因为我可以使用分析器。 我想知道的是当我运行我的应用程序时,我看到cpu使用率是8-10%,现在是否有办法知道我的应用程序的不同部分,线程正在消耗10%cpu? 基本上在那一刻,我想知道代码的哪个部分正在运行?

4 个答案:

答案 0 :(得分:1)

如果您的所有主题都有独特的启动方法,则可以使用profiler that comes with Python

如果你在Mac上,你应该查看仪器应用程序。您也可以将dtrace用于Linux。

答案 1 :(得分:0)

这在语言不可知的水平上不太实用。拿走语言,你剩下的就是一大堆机器代码指令,随处理系统调用。您可以在Windows上使用strace或在Windows上使用ProcessExplorer来尝试猜测这些系统调用发生了什么,但是使用分析器会更有意义。如果您确实可以访问该语言,那么您可以执行各种操作(额外的日志记录,在调试器中随机暂停),但在这种情况下,分析器仍然是您最好的工具。

答案 2 :(得分:0)

我能够通过编写修改后的python trace模块来解决我的问题,该模块可以启用禁用,基本上修改Trace类这样的东西

import sys
import trace

class MyTrace(trace.Trace):
    def __init__(self, *args, **kwargs):
        trace.Trace.__init__(self, *args, **kwargs)
        self.enabled = False

    def localtrace_trace_and_count(self, *args, **kwargs):
        if not self.enabled:
            return None 
        return trace.Trace.localtrace_trace_and_count(self, *args, **kwargs)

tracer = MyTrace(ignoredirs=[sys.prefix, sys.exec_prefix],)

def main():
    a = 1
    tracer.enabled = True
    a = 2
    tracer.enabled = False
    a = 3

# run the new command using the given tracer
tracer.run('main()')

输出:

 --- modulename: untitled-2, funcname: main
untitled-2.py(19):     a = 2
untitled-2.py(20):     tracer.enabled = False

在关键点启用它有助于我逐行跟踪哪些代码语句执行最多。

答案 3 :(得分:0)

在Windows XP及更高版本上,Process Explorer将显示所有进程,您可以查看每个进程的属性并查看打开的线程。它显示了线程ID,开始时间,状态,内核时间,用户时间等。