出于某种原因,我的印象是它只是被称为超时,但它似乎不是。
谢谢!
答案 0 :(得分:7)
对于数据存储区调用,例外是google.appengine.ext.db.Timeout。如果超过总(挂钟)持续时间,则例外是google.appengine.runtime.DeadlineExceededError。 DeadlineExceeded错误被抛出“软”一次,此时你有一个很短的时间来返回一个响应并退出;如果你不这样做,它会再次抛出,无法捕获,你的脚本会被毫不客气地终止。
答案 1 :(得分:3)
超时异常处理在文档的Request Timer部分进行了解释:
请求处理程序生成并返回对请求的响应的时间有限,通常约为30秒。一旦达到截止日期,请求处理程序就会中断。
Python运行时环境通过从包
DeadlineExceededError
引发google.appengine.runtime
来中断请求处理程序。如果请求处理程序没有捕获此异常,就像所有未捕获的异常一样,运行时环境将向客户端返回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的基础架构无法很好地扩展应用程序。
DataStore有自己的TimeOut exception
google.appengine.ext.db
包提供以下异常类:[...]
exception Timeout()
数据存储区操作超过数据存储区操作允许的最长时间时触发。