我正在开发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倍?
答案 0 :(得分:2)
可能是因为你有一个调试器连接 - 调试器通过检测所有内容来减慢代码的速度,并且反序列化数据存储是很多工作。
使用--use_sqlite标志将启用基于sqlite的实验性本地数据存储,这需要较少的启动时间。但请注意,当您切换到数据存储区时,它会要求您擦除数据存储区。
答案 1 :(得分:0)
一个想法是使用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内部或库代码中完成的,因此调试器不会减慢速度。