“{built-in method mainloop}”在cProfile中的含义是什么?

时间:2013-10-09 01:06:01

标签: python tkinter profiler cprofile

按总时间排序,第二个执行时间最长的函数是“{内置方法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在我的运行时间中占据那么多?

Here is a snippet of my cProfile from a longer run of my code.  That Tkinter.py mainloop is costing me hours of runtime!

2 个答案:

答案 0 :(得分:1)

mainloop是Tkinter中的event loop。它等待事件并在它们进入时处理它们。

这是一个反复出现的事情,您将在所有GUI以及任何其他事件驱动的框架(如Twisted或Tornado)中看到。

答案 1 :(得分:-1)

首先,如果将标签更改为空格,则更容易看到,如:

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.

在你加快速度之后,你仍然会发现占用时间很长的事情,但总的经过时间会更少。 最终你会得到一些事情仍然需要很高的百分比,但你不能再弄清楚如何改进它。