1

我正在 Google App Engine 上开发。我正在使用 WingIDE(一个 python IDE)在开发服务器上进行调试。我的数据存储区中有数千个实体,我可以看到当开发服务器启动时,它必须通过 DatastoreFileStub.Read() 并执行每个实体的操作。

问题是,当我通过 WingIDE 运行开发服务器时,它运行速度非常慢。我将一些分析日志代码放入谷歌应用引擎以达到峰值。

当我在命令行上运行开发服务器时,我收到以下消息:

Finished reading 10374 Entites in 10.17 seconds, 1019 per second

然而,当我通过 WingIDE 运行开发服务器时,我得到了这个:

Finished reading 10374 Entites in 52.44 seconds, 197 per second

任何人都知道为什么 WingIDE 会慢 5 倍?

4

2 回答 2

2

可能是因为您连接了调试器 - 调试器通过检测所有内容来大大降低代码速度,并且反序列化您的数据存储区需要大量工作。

使用 --use_sqlite 标志将启用基于实验性 sqlite 的本地数据存储,这应该需要更少的启动时间。但是请注意,当您切换到它时,它会要求您擦除数据存储。

于 2010-10-18T09:37:10.637 回答
0

一种思路是启动完成后使用wingdbstub进行调试。您需要在某个地方添加一个“导入wingdbstub”来编码,但这可以在启动后在任何地方调用。当然,模块必须在 python 路径上,IDE 必须配置为侦听连接,并且您需要设置一些基本的安全性——所有这些都在http://wingware.com/doc中有详细描述/debug/importing-the-debugger

还有一个 API,因此您可以更早地开始调试,并在调试器开销过多的地方暂时将其关闭。见http://wingware.com/doc/debug/debugger-api

调试器开销是一件棘手的事情(至少对于 CPython 而言),因为它与执行的 Python 字节码的数量成正比。查看 Python 代码并不总是很明显,解释器运行字节码有多少时间,C/C++ 库或 Python 内部有多少时间。如果它们执行的工作大部分是在 Python 中完成的,那么在调试器中迭代大量数据的嵌套 Python 循环之类的东西最终会慢得多。在许多事情中,大部分工作实际上是在 Python 内部或库代码中完成的,因此调试器不会减慢速度。

于 2014-02-11T19:10:13.530 回答