【问题标题】:Service invoked too many times in a short time: exec qps. (Google Script)短时间内服务调用次数过多:exec qps。 (谷歌脚本)
【发布时间】:2016-06-01 07:57:01
【问题描述】:

最近我的一些应用脚本在同时执行时显示错误。多年来一切都运行良好,显然变化发生在 Google 方面。

这是执行记录结果:

不幸的是,错误没有显示文件名和行号以正确调试,但我的第一行是:

var ss = SpreadsheetApp.getActiveSpreadsheet()

因此,我假设应用实例同时调用 SpreadsheetApp 会导致错误。 SpreadsheetApp 不在循环中,也不在任何函数内。调用它来定义应用程序使用的全局变量 ss。

我的应用程序是在我的用户名下执行的,因为用户不应该有权访问我正在访问的电子表格。恐怕我无法将整个电子表格保留在缓存服务中 - 我希望应用在调用电子表格时更新它。

更新:

这是其中一个应用程序的一些相关代码。

function doGet(e){

  var ref = e.parameter.ref;
  var ss = SpreadsheetApp.openById('########')
  var logsheet = ss.getSheetByName('LOG');
  logsheet.appendRow([new Date(),ref,JSON.stringify(e.parameter)])
  try{
     //Main code goes here
     return ContentService.createTextOutput(JSON.stringify({result:"ok"})).setMimeType(ContentService.MimeType.JSON);
  }catch(e){
     return ContentService.createTextOutput(JSON.stringify(e)).setMimeType(ContentService.MimeType.JSON)}
}

如您所见,我在函数中尝试了 {} catch(e),由于我遇到的错误没有被它捕获,我认为它发生在之前。

【问题讨论】:

  • 你能从你的脚本中分享更多的代码行吗?
  • 嗨阿米特,我从你的例子中学到了很多东西,谢谢!我添加了一个示例代码。错误发生在主执行开始之前,这表明有一些东西需要处理 SpreadsheetApp 调用。有时我的应用程序每分钟被调用 20-30 次。没什么大不了的,应该妥善处理,imo。至少它在几年内运行良好。

标签: google-apps-script google-sheets


【解决方案1】:

您可以将所有内容都放在 try-catch 块中。还记得在执行之前发布新版本的网络应用程序。

function doGet(e) {
    var response = {};
    try {
        SpreadsheetApp.openById('########')
            .getSheetByName('LOG')
            .appendRow([new Date(), e.parameter.ref, JSON.stringify(e.parameter)]);
        response.result = "OK";
    } catch (error) {
        response.result = "Error: " + error.toString();
    }

    return ContentService
        .createTextOutput(JSON.stringify(response))
        .setMimeType(ContentService.MimeType.JSON);
}

【讨论】:

  • 谢谢,其实这是我尝试的第一件事,但没有成功。如您所见,如果在函数中捕获错误 - 它应该返回带有错误详细信息的 JSON 作为字符串,但我看到的是带有错误消息的谷歌脚本网页。因此,错误发生在规模之外。我将尝试抓取屏幕截图。看起来不仅是 SpreadsheetApp,而且几个 urlFetch 调用也触发了这个错误。
  • 并发应用执行的数量没有明确的配额。此外,我得到的错误是“exec qps”——不对应于任何已知的服务。我注意到,在夜间,当我的用户不在办公室时,我没有收到此错误。
  • 我想我可能已经开始达到可以同时使用我的应用程序的最大用户数量。我有大约十几个应用程序,它们使用几个电子表格作为数据库,几个月前我尝试优化它并实现了缓存服务,但显然,当我开始执行一些批处理任务时,它已接近极限。或许,我应该考虑迁移到 App Engine...
【解决方案2】:

刚刚发现手动破解以避免此错误:

从私人浏览器模式打开您的电子表格。这将增加文档查看者的数量并增加限制:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多