我有两个正在运行的应用程序引擎应用程序实例,我希望与Restful接口进行通信。一旦其中一个的数据被更新,它就会调用另一个上的web钩子,该钩子将为它自己的系统检索数据的最新副本。在'site1‘里面,我有:
from google.appengine.api import urlfetch
url = www.site2.com/data_updated
result = urlfetch.fetch(url)在'site2‘上的data_updated处理程序中,我有:
url = www.site1.com/get_new_data
result = urlfetch.fetch(url)在两个站点之间传递的数据非常少,但我收到以下错误。我尝试将截止时间增加到10秒,但仍然不起作用。
DeadlineExceededError: ApplicationError: 5 有人能提供一些关于可能发生的事情的见解吗?
谢谢-理查德
发布于 2011-06-18 20:38:10
将方法从
result = urlfetch.fetch(url)至
result = urlfetch(url,deadline=2,method=urlfetch.POST)修复了Deadline错误。
deadline等待远程主机响应的最长时间,以秒为单位。如果远程主机在这段时间内没有响应,则会引发DownloadError。
等待请求所花费的时间不计入请求的CPU配额。它确实计入了请求计时器。如果app请求计时器在URL抓取调用返回之前超时,则调用将被取消。
请求处理程序的截止时间最长可达60秒,任务队列和cron作业处理程序的截止时间最长可达10分钟。如果deadline为None,则将deadline设置为5秒。
发布于 2011-06-18 19:13:13
App Engine的urlfetch并不总是按照预期运行,您有大约10秒的时间来获取URL。假设您正在尝试获取的URL已启动并正在运行,您应该能够通过调用from google.appengine.runtime import apiproxy_errors,然后使用except apiproxy_errors.DeadlineExceededError:将urlfetch调用包装在try/except块中来捕获DeadlineExceededError。
相关答案here。
发布于 2011-06-18 02:25:58
您是否尝试过使用curl或其他方式手动查询URL (www.site2.com/data_updated和www.site1.com/get_new_data),以确保它们在时间限制内响应?即使需要传输的数据量很小,处理程序也可能存在问题,导致返回结果的延迟。
https://stackoverflow.com/questions/6388778
复制相似问题