使用WingIDE时,Google App Engine开发服务器启动缓慢

问题描述:

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

问题是,当我通过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倍?

可能是因为你有一个调试器挂钩 - 调试器通过检测所有东西使代码变慢,并且对数据存储进行反序列化有很多工作。

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

+0

我试过了。不知道--use_sqlite实际上是否加快了速度,它可能有。但是,我发现它有点太实验了。很多东西没有工作。 – speedplane 2010-12-27 20:19:43

+0

@speedplane什么东西?我们需要错误报告来修复它。 :) – 2010-12-31 08:26:52

+0

我会再试一次,并打开一些问题。谢谢。 – speedplane 2010-12-31 21:13:01

一个想法是使用wingdbstub在启动完成后开始调试。您需要添加一个'import 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内部或库代码中完成的,所以调试器不会像过去那样减慢速度。