2009-05-29 21 views

回答

3

超時異常處理的文檔的Request Timer部分進行說明:

請求處理具有有限的時間量,以生成並返回到一個請求的響應,通常約30秒。一旦到達截止日期,請求處理程序就會中斷。

Python運行時環境通過從包google.appengine.runtime中提出DeadlineExceededError來中斷請求處理程序。如果請求處理程序不捕獲此異常(與所有未捕獲的異常一樣),運行時環境將向客戶端返回HTTP 500服務器錯誤。

請求處理程序可以捕獲此錯誤來自定義響應。在引發異常以準備自定義響應之後,運行時環境會給請求處理程序多一點時間(少於一秒)。

from google.appengine.runtime import DeadlineExceededError 

class MainPage(webapp.RequestHandler): 
    def get(self): 
    try: 
     # Do stuff... 

    except DeadlineExceededError: 
     self.response.clear() 
     self.response.set_status(500) 
     self.response.out.write("This operation could not be completed in time...")  

如果處理程序還沒有返回的響應或凸起由所述第二期限的異常,處理程序被終止,則返回缺省錯誤響應。

雖然請求可能需要30秒才能響應,但App Engine針對短期請求的應用程序進行了優化,通常需要幾百毫秒的時間。一個高效的應用程序可以快速響應大部分請求。 App Engine的基礎架構不會很好地擴展應用程序。

數據存儲區具有其自己的TimeOut exception

google.appengine.ext.db包提供以下的異常類:

[...]當數據存儲區操作超出了

exception Timeout()
募集數據存儲操作允許的最長時間。

+4

不正確。首先拋出一個可捕獲的異常,並在合理的時間間隔後拋出一個不可捕獲的異常。 – 2009-05-29 07:02:06

+0

你說得對,固定.. – dbr 2009-05-29 11:28:09

7

對於數據存儲調用,例外情況是google.appengine.ext.db.Timeout。對於超過總時長(掛鐘)的情況,例外情況是google.appengine.runtime.DeadlineExceededError。 DeadlineExceeded錯誤被拋出'soft'一次,此時你有很短的時間返回響應並退出;如果你不這樣做,它會再次被拋出,無法捕捉,並且你的腳本被毫不客氣地終止。

相關問題