cProfile 中的“built-in method mainloop”是啥意思?
Posted
技术标签:
【中文标题】cProfile 中的“built-in method mainloop”是啥意思?【英文标题】:What does "built-in method mainloop" mean in cProfile?cProfile 中的“built-in method mainloop”是什么意思? 【发布时间】:2013-10-09 01:06:00 【问题描述】:按总时间排序,执行时间第二长的函数是“built-in method mainloop”?我用 pstats_viewer.py 查看了同一个条目并单击它,它说:
Function Exclusive time Inclusive time Primitive calls Total calls Exclusive per call Inclusive per call
Tkinter.py:359:mainloop 0.00s 561.03s (26.3%) 1 1 0.00s 561.03s
这是什么意思?
编辑
这是我的代码运行较长时间后的 cProfile 输出的一部分。我解决的 ODE 越多,用于主循环的时间就越多。这太疯狂了!我认为我的运行时被我的 CUDA 内核中的分支分歧或主机-GPU 内存传输杀死。天哪,我是个糟糕的程序员!
我是如何让 Tkinter 占用我这么多运行时间的?
【问题讨论】:
【参考方案1】:mainloop
是 Tkinter 中的 event loop。它等待事件并在它们进入时对其进行处理。
这是您将在所有 GUI 以及任何其他事件驱动框架(如 Twisted 或 Tornado)中看到的反复出现的事情。
【讨论】:
这不是可以优化的东西,对吧?只是在后台工作?在将近十分钟的总运行时间中,这(连同我的主要 CUDA 内核)确实使我的模型减慢到无法迭代的程度。 是的,我仍然觉得我需要知道这个主循环到底在做什么。我在我的程序中使用 EZGUI 来获取一些初始参数和所有内容,但是请查看我长时间运行的代码中的这个 cProfile 输出。我看不出 Tkinter 与我的程序如何同时解决许多微分方程之间的联系。【参考方案2】:首先,查看是否将制表符更改为空格会容易得多,如下所示:
Function Exclusive time Inclusive time Primitive calls Total calls Exclusive per call Inclusive per call
Tkinter.py:359:mainloop 0.00s 561.03s (26.3%) 1 1 0.00s 561.03s
独占时间是指程序计数器在该例程中的时间。对于***例程,您会期望这几乎为零。
包含时间是指在例程调用的所有例程中都包含时间。对于***例程,您会期望这实际上是 100%。 (我不明白 26.3% 是什么意思。)
如果您想提高速度,您需要做的是找到 1) 包含时间百分比较高的活动,以及 2) 您可以做一些事情。
This link shows the method I use.
在你加速某件事之后,你仍然会发现一些事情占用了高百分比的包容时间,但总体经过的时间会更少。 最终你会到达一个点,有些事情仍然占据很高的百分比,但你不再想出如何改进它。
【讨论】:
以上是关于cProfile 中的“built-in method mainloop”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
cProfile 中的“built-in method mainloop”是啥意思?
Python通过装饰器并使用cprofile对函数进行性能分析