2010-10-16 90 views
1

我正在使用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倍?

回答

2

可能是因爲你有一個調試器掛鉤 - 調試器通過檢測所有東西使代碼變慢,並且對數據存儲進行反序列化有很多工作。

使用--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

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內部或庫代碼中完成的,所以調試器不會像過去那樣減慢速度。

相關問題