use*_*421 14 google-app-engine deadlines google-api-python-client
我们正在使用Python数据2.15库的开发人员python指南,并按照app引擎的说明.createSite("test site one",description ="test site one",source_site =(" https://sites.google.com/feeds/site/googleappsforus.com/google-site-template "))
每次使用时,我们都会收到无法预测的响应.
例外: HTTPException:等待来自URL的HTTP响应时超过截止日期:https://sites.google.com/feeds/site/googleappsforyou.com
有人遇到过同样的问题吗?AppEngine或Sites API是否相关?
问候,
Ber*_*rst 34
等待来自URL的HTTP响应时超过截止时间实际上是DeadlineExceededError.当您发出HTTP请求时,App Engine会将此请求映射到URLFetch.URLFetch有自己的可配置截止日期.请参阅URLFetch文档.
您的客户端库似乎捕获DeadlineExceededError并抛出HTTPException.您的客户端库要么将截止日期传递给URLFetch(您需要更改),或者默认截止日期不足以满足您的请求.
尝试设置默认的URLFetch截止日期,如下所示:
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(45)
Run Code Online (Sandbox Code Playgroud)
另外,请务必查看官方文档中的处理DeadlineExceededErrors.
请记住,任何最终用户发起的请求必须在60秒内完成,否则将遇到DeadlineExceededError.请参阅App Engine Python运行时请求计时器.
在使用最新版本的httplib2
和时,接受的解决方案对我不起作用googleapiclient
.问题似乎是httplib2.Http
将其超时参数一直传递给urlfetch
.由于它具有默认值None
,urlfetch
因此将该请求的限制设置为5秒,而不管您设置的默认值是什么urlfetch.set_default_fetch_deadline
.看来你有几个选择.
第一个选项 - 您可以显式传递httplib2.Http
around 的实例:
http = httplib2.Http(timeout=30)
...
client.method().execute(http=http)
Run Code Online (Sandbox Code Playgroud)
第二个选项,您可以使用套接字1设置默认值:
import socket
socket.setdefaulttimeout(30)
Run Code Online (Sandbox Code Playgroud)
第三个选项,您可以告诉appengine使用套接字进行请求2.为此,您修改app.yaml
:
env_variables:
GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'
Run Code Online (Sandbox Code Playgroud)
1这可能仅适用于付费应用程序,因为套接字api可能不适用于非付费应用程序...
2我几乎可以肯定这只适用于付费应用程序,因为套接字api无法用于非付费应用程序...
归档时间: |
|
查看次数: |
14385 次 |
最近记录: |