google.appengine.api.urlfetch截止日期限制为60秒?

时间:2017-01-11 09:48:32

标签: python google-app-engine google-app-engine-python

我在谷歌应用引擎上使用python,并对从进行后端处理的机器发出的请求获取google.appengine.api.urlfetch_errors.DeadlineExceededError。请求大约需要60秒,有时需要更长时间,所以我试图增加截止日期。

请求包含在重试中,从日志中我可以看到重试之间的时间总是大约60秒。我认为这可能是因为我错误地配置了某些内容,或者误解了截止日期的限制。

机器配置为:

instance_class: B8
basic_scaling:
  max_instances: 1
  idle_timeout: 10m

我使用的代码是(为简单起见而编辑):

from google.appengine.api import urlfetch
from retrying import retry

timeout = 600
retries = 10

@retry(
    stop_max_attempt_number=retries,
    wait_exponential_multiplier=1000,
    wait_exponential_max=1000*60*5
)
def fetch(url):
    """Fetch remote data, retrying as necessary"""
    urlfetch.set_default_fetch_deadline(timeout)
    result = urlfetch.fetch(url)
    if result.status_code != 200:
        raise IOError("Did not receive OK response from server")
    return result.content

data = fetch(config['url'])

我已尝试将截止日期明确设为urlfetch.fetch(url, deadline=timeout),但设置默认值似乎是大多数人建议的方法。

有人可以澄清是否有可以为deadline设置的最大值?

1 个答案:

答案 0 :(得分:2)

请求计时器

Google App Engine请求计时器(Java / Python / Go)可确保请求具有有限的生命周期,并且不会陷入无限循环。目前,前端实例请求的截止时间为60秒。 (后端实例没有相应的限制。)每个请求,包括预热(请求/ _ah / warmup)和加载请求(" loading_request = 1"日志标题)都受此限制。

如果请求在60秒内未能返回并且抛出DeadlineExceededError但未捕获,则请求将中止,并返回500内部服务器错误。如果捕获到DeadlineExceededError,但响应生成的速度不够快(您的响应时间不到一秒),则请求将中止,并返回500内部服务器错误。

据我阅读文档,我认为应用引擎中的最大请求超时为60秒。 Here is the link to the documentation