为什么在Eclipse/PyDev中调试我的Python程序如此慢?

8 投票
3 回答
4288 浏览
提问于 2025-04-16 22:37

我有一个相对简单的 Python 2.7 程序,没有使用类。这个程序的第一步是把一个 sqlite 数据库读入一个字典里。这个数据库虽然比较大,但也不算特别巨大,差不多有 90MB。读取这个数据库大约需要 20 秒。读取完数据库后,我会初始化一些变量,比如:

localMax = 0
localMin = 0
firstTime = True

当我在 Eclipse-3.7.0/pydev 中调试这个程序时,即使是这些简单的代码,每次单步调试都会占用 100% 的 CPU 核心,而且需要 5 到 10 秒。我能看到 Python 进程的 CPU 使用率飙到 100%,持续 10 秒。单步调试……等 10 秒……再单步调试……再等 10 秒……如果我在命令行用 pdb 调试,就没有这个问题。如果我根本不调试,程序运行速度就“正常”,没有像在 Eclipse 中那样奇怪的情况。

我在一台双核的 Windows 7 电脑上、我的 8 核 Ubuntu 机器上,还有我的 Mac Air 上都复现了这个问题。看看这多跨平台开发啊!我一直在想它总会在某个地方正常工作。其实我从来没有接近过内存不足的情况。

在每次 Eclipse 的单步调试中,为什么 Python 进程会跳到 100% 的 CPU 使用率,并且需要 10 秒呢?

3 个回答

0

在我的情况下,我把qtThread的调试设置成了这个样子 点击这里查看图片

1

我只是把这一行注释掉了:

np.set_printoptions(threshold = 'nan')

看起来Eclipse这个软件在处理太多信息,搞得有点忙不过来了。

7

这里有一个不错的解决办法,基于Mikko Ohtamaa的提示。我刚在我的Mac Air上验证了以下内容:

  • 如果我直接关闭Eclipse界面中的“变量”窗口,我就可以正常速度逐步调试代码。这很好,但问题是,我没有“变量”窗口。
  • 对于我想查看的任何变量,我只需将光标悬停在变量上,就能看到它的值。我没有尝试悬停在我的大字典上,因为它是问题的根源。
  • 我还可以右键点击任何变量,添加一个“监视”,这会弹出一个“表达式”窗口。在这种情况下,变量只是一个简单的“表达式”的特殊情况。

所以,对我来说,解决办法就是关闭Eclipse的变量窗口,使用表达式窗口来选择性地查看变量。这虽然麻烦,但对于我正在进行的调试来说,比使用pdb要好。

撰写回答