App Engine urlfetch引发异常我已经使用App Engine API编写了我的第一个Python应用程序,它旨在监视服务器列表,并在其中一个服务器发生故障时通知我使用Prowl发送消息给我的iPhone,或发送给我一封电子邮件,或两者兼而有之。当我认为它不应该是
问题是,一周几次,它通知我服务器即使在显然没有关闭的情况下也会关闭。我已经用我知道的服务器测试过它几乎所有的时间,如google.com或amazon.com,但我也收到通知。
我有一个运行在http://aeservmon.appspot.com的代码的副本,您可以看到google.com已于1月3日添加,但仅列为最多6天。
下面是checkservers.py代码的相关部分,它检查urlfetch,我认为DownloadError异常只会在服务器无法联系时引发,但也许我错了。
我错过了什么?
对下mrsteveman1/aeservmon GitHub的全部源(我只能发布一个链接作为新用户,对不起!)
def testserver(self,server):
if server.ssl:
prefix = "https://"
else:
prefix = "http://"
try:
url = prefix + "%s" % server.serverdomain
result = urlfetch.fetch(url, headers = {'Cache-Control' : 'max-age=30'})
except DownloadError:
logging.info('%s could not be reached' % server.serverdomain)
self.serverisdown(server,000)
return
if result.status_code == 500:
logging.info('%s returned 500' % server.serverdomain)
self.serverisdown(server,result.status_code)
else:
logging.info('%s is up, status code %s' % (server.serverdomain,result.status_code))
self.serverisup(server,result.status_code)
更新1月21日:
今天,我发现一个例外的日志:
ApplicationError: 5
Traceback (most recent call last):
File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__
handler.get(*groups)
File "/base/data/home/apps/aeservmon/1.339312180538855414/checkservers.py", line 149, in get
self.testserver(server)
File "/base/data/home/apps/aeservmon/1.339312180538855414/checkservers.py", line 106, in testserver
result = urlfetch.fetch(url, headers = {'Cache-Control' : 'max-age=30'})
File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py", line 241, in fetch
return rpc.get_result()
File "/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 501, in get_result
return self.__get_result_hook(self)
File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py", line 331, in _get_fetch_result
raise DownloadError(str(err))
DownloadError: ApplicationError: 5
我最近的“假阳性”是在不到一个小时前7:04 EST,而且只有日志消息由appengine日志中的logging.info()触发。我可以尝试让异常处理未处理,但我相信我几个星期前尝试过,只看到DownloadError异常消息与其他一些。尽管现在我会再试一次,希望今晚能再次触发异常。 – steveatinfincia 2010-01-21 00:54:18
在我删除异常处理之后,用今天发生的异常之一更新了问题。我以前没见过ApplicationError:5,显然这意味着请求没有在urlfetch的限制内返回? – steveatinfincia 2010-01-21 19:43:50
是的完全正确...提取服务可能有偶尔的延迟(假设目标服务器不是问题)。你可以在'fetch()' – jspcal 2010-01-21 20:04:43