如果Google App Engine cron作业有10分钟的限制,那么为什么我会在正常的30秒后获得DeadlineExceededError?

时间:2012-10-22 01:43:59

标签: python google-app-engine cron timeout

根据https://developers.google.com/appengine/docs/python/config/cron cron,工作可以持续10分钟。但是,当我尝试通过以管理员身份登录时转到cron作业的URL来测试它时,它会因DeadlineExceededError而超时。最好的我可以告诉这种情况发生在大约30秒内,这是请求的非cron限制。我是否需要做一些特殊的事情来测试cron规则与正常限制?

这就是我正在做的事情:

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

在循环ebay api调用期间始终存在问题。这类似于必须在循环中进行500次api调用。

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

编辑:我可以发布实际代码,如果你认为它会有所帮助,但我认为这是一个我做错的过程,而不是代码中的错误,因为如果我将查询限制为大约60个api电话。

2 个答案:

答案 0 :(得分:9)

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

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

希望这有帮助!

答案 1 :(得分: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)