2012-05-22 34 views
1

我希望我的Google應用程序引擎webapp2應用程序儘快啓動(創建新的應用程序實例)。我想知道我應該注意什麼明顯的緩慢起伏(我知道..過早優化,但我不想在最後做一個大規模的重新因素,如果我可以幫助它)如何在webapp2中導入模型和處理程序以確保新應用程序實例的快速啓動

我有一個文件夾這個層次類似於:

-root_folder 
__init__.py 
main.py 
config.py 
routes.py 
models.py 
gviz_api.py 
... 20 more .py files 
-web_folder 
    __init__.py 
    some_handlers.py 
    more_handlers.py 
    20 more.py files 
    .. 
-data_model_folder 
    __init__.py 
    some_models.py 
    more_ndb_models.py 
    10 more model files 
-many more folders e.g. templates, simpleauth etc. 

in main.py,我用路由器創建一個應用實例(路由器從routes.py導入)。 routes.py導入每個處理程序(爲每個路由分配一個處理程序)。每個處理程序幾乎導入每個數據模型。這是否意味着我的應用程序創建新應用程序實例的速度很慢?

我期待在我的項目結束時擁有大約100個處理程序和30個數據模型,但其中很多將很少使用。

進口(從內some_handlers.py)

數據模型將只需要將下面夠快:

from root_folder.data_model_folder.more_ndb_models import special_model

我應該尋找使用config /註冊表?

回答

2

通常,速度減慢是由於導入大型框架,而不是大量的應用程序代碼。所以即使你有100個.py文件,我也不會太擔心。 (相信我,100並不是那麼多...)我也會考慮熱身的要求。

我不是懶惰的進口技巧的粉絲 - 他們可能會導致邊緣情況下的複雜失敗模式(即難以調試),並且他們不會受益於App Engine給予加載請求的額外寬鬆檢查你的日誌,看看它認爲是一個加載請求)。

特別是,如果您在開始時不導入所有模型類,則可能會遇到「找不到類型爲X的模型類」錯誤。

+0

這超出了我的「沒有模型類找到類'X'」可能會發生 - 我會考慮不使用懶惰進口不管。你提到的其他一切都非常有幫助。 –

+0

另外,通過「大型框架」,你的意思是包含在應用程序引擎中的任何一個?例如numpy etc –

+1

「如果您從用戶接收到編碼密鑰並從數據存儲中檢索到該密鑰,則可能會發生沒有找到類型爲'X'的模型類」。如果鍵的類型是X,但定義類X的模塊尚未導入,則會出現此錯誤,因爲客戶端代碼需要具有類X以構建結果。大型框架中,我主要是指Django;儘管整個應用程序引擎也很重要。 :-) –

3

Webapp2支持lazily-imported handlers

+0

謝謝,那麼有什麼理由不使用這些每一個路線? 也是我目前進口special_model pythonic的方法?每個__init__.py文件都是空的。 –

+0

我想我需要判斷什麼是最好的。如果用戶訪問handler1和handler2,並且handler1和handler2都導入dbmodelx,那麼我將導入dbmodelx兩次。 (而我可以把handler1和handler2放在同一個模塊中,因此只導入一次dbmodelx)。 –

+0

下面是我對你的問題的猜測答案:你應該很好地使用所有路由的懶惰導入處理程序。我在我的應用程序中。對於第二個問題:我會使用文件較少的解決方案。應用程序引擎中的本地文件訪問不是很好(java人通常會將所有東西都捆綁到一個jar文件中,以減少文件抓取的次數)。我相信Python中的導入會被緩存,所以導入兩次並不會很昂貴。 – mjibson

相關問題