【问题标题】:Count Method Throwing 500 error计数方法抛出 500 错误
【发布时间】:2012-09-14 12:41:46
【问题描述】:

我陷入了困境。我想知道基于每日、每周、每月和所有时间的 Fetch 计数。在 Datastore 中,计数约为 2,368,348。每当我尝试通过 Model 或 GqlQuery 获取计数时,我都会收到 500 错误。当行数较少时,下面的代码可以正常工作。

请任何大师纠正我或告诉我正确的解决方案吗?我正在使用 Python。

模型:

class Fetch(db.Model):
    adid = db.IntegerProperty()
    ip = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)

统计代码:

adid = cgi.escape(self.request.get('adid'))
...
query = "SELECT __key__ FROM Fetch WHERE adid = " + adid  + " AND date >= :1"  
rows = db.GqlQuery( query, monthlyDate)
fetch_count = 0
for row in rows:
   fetch_count = fetch_count + 1
self.response.out.write( fetch_count)

【问题讨论】:

  • 查看日志。您将收到一个deadlineexceeded 错误。您正在尝试的内容在前端请求中不起作用。

标签: google-app-engine gql


【解决方案1】:

您的查询花费的时间似乎比 GAE 允许查询运行的时间长(通常约为 60 秒)。来自count() documentation

除非期望结果计数很小,否则最好指定一个限制参数;否则该方法将继续执行,直到完成计数或超时。

来自Request Timer documentation

请求处理程序生成并返回对请求的响应的时间有限,通常约为 60 秒。一旦到达最后期限,请求处理程序就会被中断。

如果提出DeadlineExceededError,这是您的问题。如果您需要运行此查询,请考虑在 GAE 中使用 Backends。使用后端,生成和返回请求没有时间限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2017-11-06
    • 2015-03-08
    相关资源
    最近更新 更多