为什么我看到Deadline超过了HTTPException的延迟?

时间:2019-04-05 03:36:57

标签: google-app-engine urllib2 djangae

为什么从App Engine上的defer(仅)发出HTTP请求时,看到“超过最后期限” HTTPException?使用urllib2发出请求时,我设置了超时时间(540秒)(请参见下文),但是我的请求在180秒左右超时。使用Cloud SDK和Djangae,该请求可以在本地正常运行。

    req = urllib2.Request(
        settings.ENDPOINT,
        json_data,
        {
            'Content-Type': 'application/json',
            'X-API-KEY': settings.SOME_KEY,
        }
    )
    response = urllib2.urlopen(req, timeout=settings.SOME_TIMEOUT)

更新:

我还尝试通过google.appengine.api.urlfetch将全局set_default_fetch_deadline超时设置为540,但没有成功。

1 个答案:

答案 0 :(得分:1)

我在代码中始终收到这些警告:

  

/base/data/home/apps/s~my-project-id/version-id/lib/urllib3/contrib/appengine.py:256:   AppEnginePlatformWarning:URLFetch不支持粒度超时   设置,恢复为总的或默认的URLFetch超时。

urllib2可能遇到相同的问题,但根本不会像urllib3那样记录警告

编辑:

我刚刚注意到您说您还尝试设置urlfetch的全局超时。 Java文档说

  

HTTP(S)请求的最长期限为60秒

出于某种原因,python文档中没有此功能,但我的猜测是,无论您将超时设置为什么,都将受到一些内部max-timeout值的限制。

https://cloud.google.com/appengine/docs/standard/java/outbound-requests#request_timeouts