【问题标题】:Google Drive API + App Engine = time outGoogle Drive API + App Engine = 超时
【发布时间】:2014-02-10 10:53:52
【问题描述】:

所以我在 App Engine 上构建了一个应用程序,它获取用户文件并将它们移动到同一域中的某些文件夹。我制作了调用 Drive API 来列出文件、重命名文件和更改权限等的 REST api。

在应用加载时,它会向服务器触发 4 次 ajax 调用,以获取文件夹的名称和 ID,并检查某个文件夹是否存在。

问题是前端 ajax 调用在生产中一直超时。应用引擎 url 提取有 60 秒的限制。我使用了 App 引擎的 oauth2 库,它使用了不同的 httplib2。因此,我将 httplib2 源截止日期修改为最大 60 秒,但它似乎在 30 秒后超时。结果,几乎每次 Drive API 调用都会超时,并且应用程序无法正常工作。

我已阅读有关使用部分响应优化驱动器 api 调用的指南并实施了它,但没有看到明显的差异。快把我逼疯了……请帮忙

【问题讨论】:

    标签: python google-app-engine oauth-2.0 google-drive-api httplib2


    【解决方案1】:

    您提到“AppEngine 的 oauth2 库”,但随后您说“Drive API 调用超时”。所以修改 Oauth http 库不会影响 Drive。

    您是在使用 Google 库进行云端硬盘调用,还是直接进行 REST HTTP 调用?

    如果是前者,请尝试...

    HttpRequest.setConnectTimeout(55000)

    ,如果后者只是...

    request.getFetchOptions().setDeadline(55d)

    注意。 Drive今天脑子里放了个屁,所以人们希望潜在的问题会自行消失。

    【讨论】:

    • 您好,谢谢。 Drive API 前几天确实有问题。今天又恢复正常了。对不起,应该更清楚。我正在使用应用程序引擎 Oauth python sdk,它有一个 oauth_required decorator,它自动处理所有 Oauth2 步骤,以获取它附加到的请求处理程序。因此,我不必在任何地方制作 http 对象,也没有设置超时。我在 Oauth 库中没有找到 HttpRequest.setConnectTimeout(55000)。应用引擎有不同的 oauth 库
    • 我在库中搜索deadline,我发现它的唯一位置是在一个名为_new_fixed_fetch 的函数中,它返回一个获取函数fetch(url, payload=payload, method=method, headers=headers, allow_truncated=allow_truncated, follow_redirects=follow_redirects, deadline=60,validate_certificate=validate_certificate) 截止日期最初设置为5 秒,我更改了它到 60 但它似乎在 60 秒之前超时。 Drive 是否有一个限制它自己设置在一定时间后返回 500?
    • 如果 Drive 返回 500,这通常意味着 API/Drive 基础架构中出现了问题。通常它是 G 中不同服务器之间的内部超时。它可以在指数退避后重试。有时,它可能是由于您的代码触发了您可以在 SO 上搜索的错误之一。抱歉,我不懂 Python 可以帮你配置超时。
    • 酷,谢谢。我想这主要是G的问题而不是我的问题。很高兴今天一切恢复正常。
    • 往好的方面看,这是测试应用程序错误处理的好机会 :-)
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 2022-01-25
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多