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

Python 如何检查应用程序的哪个部分正在消耗CPU?,python,wxpython,cpu-usage,Python,Wxpython,Cpu Usage,我有一个wxPython应用程序,它有许多工作线程、空闲事件周期和许多其他类似的事件处理代码,这些代码可能会消耗CPU,目前,当应用程序不与之交互时,会消耗大约8-10%的CPU 问题: 有没有一个工具可以告诉我的应用程序的哪个部分/线程消耗了最多的CPU?如果没有这样的通用工具,我愿意知道您通常采取什么方法来解决这种情况?e、 g.禁用部分应用程序、跟踪等 编辑:可能是我的问题语言不明确,我不想知道代码中的哪个函数或代码块占用了大部分资源,因为我可以使用分析器。 我想知道的是,当我运行我的应用

我有一个wxPython应用程序,它有许多工作线程、空闲事件周期和许多其他类似的事件处理代码,这些代码可能会消耗CPU,目前,当应用程序不与之交互时,会消耗大约8-10%的CPU

问题:

有没有一个工具可以告诉我的应用程序的哪个部分/线程消耗了最多的CPU?如果没有这样的通用工具,我愿意知道您通常采取什么方法来解决这种情况?e、 g.禁用部分应用程序、跟踪等

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

如果所有线程都有唯一的启动方法,那么可以使用


如果你在Mac电脑上,你应该查看Instruments应用程序。您也可以使用Linux。

这在语言不可知的级别上不是很实用。除去语言,剩下的只是一堆散布在系统调用中的机器代码指令。您可以使用Linux上的strace或Windows上的ProcessExplorer来尝试并猜测这些系统调用中发生了什么,但只使用探查器更有意义。如果您确实可以访问该语言,那么您可以做很多事情(额外的日志记录、调试器中的随机暂停),但在这种情况下,探查器仍然是您最好的工具。

我可以通过编写修改版的python模块来解决我的问题,该模块可以启用或禁用,基本上修改
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

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

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

分析器在这里有什么帮助?dtrace是否可用于linux(ubuntu)?@Anurag Uniyal:你不清楚探查器是做什么的吗?它告诉你程序的哪个部分一直在用光。如果每个线程都有一个唯一的启动方法,则始终使用的方法名将告诉您始终使用的是哪个线程。请仔细阅读分析程序。我可能没有你那么了解分析程序,但是的,我经常使用分析程序,可能是我的问题的语言不明确,我已经编辑过了,看看现在是否有意义?@s.Lott,profilet告诉我们执行时间(io和其他等待计数),而不是每个函数的cpu使用情况。OK删除了语言不可知,但我仍然不确定探查器是否能帮我很多忙。一些探查器不仅能提供单个函数的输出(例如采样),还能提供整个调用堆栈的输出(例如函数属性或“调用图”)。这会准确地告诉您应用程序的大部分时间都花在了什么地方。我知道,但是分析线程和主线程会提供大量数据,并且可能是错误的警报,例如,大部分时间都花在正确的功能上,但由于大量事件、计时器、,在整个系统中,我只想跟踪那些你会准确跟踪的线程。如果没有“活动”,那么在探查器中显示的就是您所谈论的内容。“语言不明确”不会改变下面的答案。使用探查器——不考虑语言——查看时间的走向。你是想要“魔法”还是什么“秘密”工具?探查器的回答有什么问题,你拒绝了它?@s.Lott:因为我无法看到探查器如何更有效地解决我的问题,或者根本无法解决问题,而不是我只是打开跟踪几秒钟,看看当时运行的是什么,而不是说执行评测,你能解释一下如何使用评测吗?在这种情况下,你可能会解释说这会澄清你的疑问,或者很可能是minehi@Anurag Uniyal,我们正在寻找完全相同的解决方案。你能分享一下你的修改和使用情况吗。但是执行最多的行…不一定是相同的cpu消耗时间吗?探查器简单地告诉我们,Numcallfunction@AmolPujari如果你读到这个问题,它是关于如何知道GUI应用程序在给定时刻执行什么,主要是消耗CPU,基本上是跟踪源代码,而不是分析它