3

根据https://developers.google.com/appengine/docs/python/config/cron cron 作业可以运行 10 分钟。但是,当我以管理员身份登录时通过转到 cron 作业的 url 来尝试对其进行测试时,它会超时并出现 DeadlineExceededError。最好我能说这发生在大约 30 秒内,这是请求的非 cron 限制。我是否需要做一些特别的事情来使用 cron 规则与正常限制进行测试?

这就是我正在做的事情:

  • 转到 cron 作业的 url
  • 这会调用我的处理程序,它会在我的 py 脚本中调用单个函数
  • 此函数对谷歌的云 sql 进行数据库调用并循环遍历结果行,在使用 ebay 的 api 的每一行上调用一个函数以获取一些数据
  • 来自 ebay api 调用的数据存储在一个数组中,在所有调用完成后全部写回数据库。
  • 循环完成后,它将数据写入数据库并返回给处理程序
  • 处理程序打印完成消息

在循环 ebay api 调用期间它总是有问题。这就像必须在循环中进行的 500 次 API 调用。

知道为什么我没有得到完整的 10 分钟吗?

编辑:如果您认为有帮助,我可以发布实际代码,但我假设这是一个我做错的过程,而不是代码中的错误,因为如果我将查询限制为大约 60 api,它就可以正常工作来电。

4

2 回答 2

10

GAE 执行 cron 作业的方式允许它运行 10 分钟。这可能是通过检查用户代理、IP 地址或其他方法来完成的(我只是在这里猜测)。仅仅因为您设置了一个 cron 作业来访问应用程序中的 URL,并不意味着来自浏览器的标准 HTTP 请求将允许它运行 10 分钟。

测试作业是否有效的方法是在没有限制的本地开发服务器上进行。或者等到您的 cron 作业执行并检查日志是否有任何错误。

希望这可以帮助!

于 2012-10-22T02:12:37.120 回答
1

以下是如何澄清异常并判断它是否是 urlfetch 问题。如果异常是:

* google.appengine.runtime.DeadlineExceededError: raised if the overall request times out, typically after 60 seconds, or 10 minutes for task queue requests;
* google.appengine.runtime.apiproxy_errors.DeadlineExceededError: raised if an RPC exceeded its deadline. This is typically 5 seconds, but it is settable for some APIs using the 'deadline' option;
* google.appengine.api.urlfetch_errors.DeadlineExceededError: raised if the URLFetch times out.

然后查看https://developers.google.com/appengine/articles/deadlineexceedederrors,因为这是一个 urlfetch 问题。

如果是 urlfetch 超时,请尝试设置更长的持续时间(例如 60 秒):

 result = urlfetch.fetch(url, deadline=60)
于 2012-10-22T02:37:54.727 回答