0

按总时间排序,执行时间第二长的函数是“{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 占用我这么多运行时间的?

这是我的较长代码运行中的 cProfile 片段。 那个 Tkinter.py 主循环花费了我几个小时的运行时间!

4

2 回答 2

1

mainloop是 Tkinter 中的事件循环。它等待事件并在它们进入时对其进行处理。

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

于 2013-10-09T01:32:48.163 回答
-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)您可以做一些事情

此链接显示了我使用的方法。

在你加快速度之后,你仍然会发现需要高百分比的包含时间的东西,但整体经过的时间会更少。最终你会到达一个点,有些事情仍然占据很高的百分比,但你不再想出如何改进它。

于 2013-10-09T13:37:13.607 回答