首页 > 解决方案 > 为什么我看到 Deferred 中的 Deadline 超出了 HTTPException?

问题描述

defer从App Engine 上的(仅)内部发出 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超时设置为 540,set_default_fetch_deadline但没有成功。

标签: google-app-engineurllib2djangae

解决方案


我的代码中一直收到这些警告:

/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 文档中没有这种情况,但我的猜测是,无论您将超时设置为什么,您都会受到一些内部最大超时值的限制。

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


推荐阅读