我在谷歌应用引擎上使用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
设置的最大值?
答案 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