HTTPException:等待来自URL的HTTP响应时超出截止时间:#deadline

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运行时请求计时器.


mgi*_*son 8

在使用最新版本的httplib2和时,接受的解决方案对我不起作用googleapiclient.问题似乎是httplib2.Http将其超时参数一直传递给urlfetch.由于它具有默认值None,urlfetch因此将该请求的限制设置为5秒,而不管您设置的默认值是什么urlfetch.set_default_fetch_deadline.看来你有几个选择.

第一个选项 - 您可以显式传递httplib2.Httparound 的实例:

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无法用于非付费应用程序...