【发布时间】:2015-07-16 10:35:40
【问题描述】:
我们的 GAE python 应用程序使用 Google Api Client for Python(目前我们使用版本 1.3.1)和 GAE 特定的身份验证帮助程序与 BigQuery 通信。在与 BigQuery 通信时,我们经常会遇到套接字错误。
更具体地说,我们构建一个python Google API客户端如下
1. bq_scope = 'https://www.googleapis.com/auth/bigquery'
2. credentials = AppAssertionCredentials(scope=bq_scope)
3. http = credentials.authorize(httplib2.Http())
4. bq_service = build('bigquery', 'v2', http=http)
然后我们与 BQ 服务交互并得到以下错误
文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/gae_override/httplib.py”,第 536 行,在 getresponse '连接服务器时出错: %s' % e) 错误:连接服务器时出错:无法获取 URL:[api url...]
引发的错误属于 google.appengine.api.remote_socket._remote_socket_error.error.error 类型,而不是包装错误的异常。
最初我们认为它可能与超时有关,因此我们也尝试设置超时将上述sn-p中的第3行更改为
3. http = credentials.authorize(httplib2.Http(timeout=60))
但是,根据客户端库的日志输出,API 调用在不到 1 秒的时间内崩溃,并且显式设置超时并没有改变系统行为。
请注意,错误发生在各种 API 调用中,而不仅仅是单个调用,而且通常发生在非常轻量级的操作中,例如我们经常在轮询 BQ 以获取作业状态时看到错误,而很少在数据获取时看到错误。当我们重新运行该操作时,系统就可以工作了。
知道为什么会发生这种情况,以及处理它的最佳实践吗?
【问题讨论】:
-
SSL 工作正常吗?也许尝试停用 SSL 验证对等体。
-
我也间歇性地看到同样的错误。
-
关于@Pentium10 的推荐,我们有 http = credentials.authorize(httplib2.Http(disable_ssl_certificate_validation=True, timeout=30)) 我们仍然看到一些错误
标签: google-app-engine google-bigquery google-api-python-client