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”是啥意思?

如何省略 cProfile 中的方法

将 cprofile 与输入文件一起使用

Python通过装饰器并使用cprofile对函数进行性能分析

Pandas:如何将 cProfile 输出存储在 pandas DataFrame 中?

Python cProfile 结果似乎没有加起来