【问题标题】:Why do I keep getting "Exception: Service invoked too many times in a short time: groups read. Try Utilities.sleep(1000) between calls."?为什么我不断收到“异常:服务在短时间内调用太多次:组读取。在调用之间尝试 Utilities.sleep(1000)。”?
【发布时间】:2021-04-13 13:50:02
【问题描述】:

我刚刚运行了来自 Apps 脚本教程的示例代码:

https://developers.google.com/apps-script/reference/groups/group#getGroups()

(我已将循环部分注释掉以使问题清晰。)

function listGroupMembers() {
  var GROUP_EMAIL = "a-group@in.mydomain";
  var group = GroupsApp.getGroupByEmail(GROUP_EMAIL);
  Utilities.sleep(10000);

  var childGroups = group.getGroups();
  console.log("Group " + GROUP_EMAIL + " has " + childGroup.length + " groups:");

  /* comment out the loop to make the problem clear.
  for (var i = 0; i < childGroups.length; i++) {
    var childGroup = childGroups[i];
    console.log(childGroup.getEmail());
  }
  */

}

但我不断收到以下异常:

Exception: Service invoked too many times in a short time: groups read. Try Utilities.sleep(1000) between calls. 
listGroupMembers    @ test.gs:6

即使我在过去 24 小时内第一次运行脚本,我也会收到此异常。有什么建议吗?

【问题讨论】:

    标签: google-apps-script google-groups google-groups-api


    【解决方案1】:

    一定是getGroups()的限制。

    我测试了一个更改子组数量的组。结果如下。

    • 组数:1 到 7:总是成功。
    • 组数:8:有时会失败。
    • 组数:9:有时成功。
    • 组数:10:总是失败。

    看起来我们只能在子组数量为 7 或更少时使用getGroups()

    【讨论】:

      【解决方案2】:

      可能的问题:

      • 您的getEmail() 有很多电话。即使函数执行了一次,连续的childGroup.getEmail() 也会在短时间内在超过配额的短时间内在循环内多次调用。
      • 读取的组显示每天限制为 2000/10000(取决于您的帐户)。如果您的超出该限制,则它已达到配额。如果没有,那么它可能达到了每分钟/小时的配额(尚未找到文档,它是每分钟/小时多少)

      您可以采取的可能步骤:

      • 将您的sleep 函数放在循环中,以便它暂停每个循环,从而减少每分钟/小时完成的调用。看看这是否能缓解问题。
        for (var i = 0; i < childGroups.length; i++) {
          var childGroup = childGroups[i];
          console.log(childGroup.getEmail());
          Utilities.sleep(10000);
        }
      
      • 如果没有,请检查childGroups 的长度。如果超出限制,请尝试将循环限制在 1950/9950 以解决问题。如果解决了问题,则确认您的函数由于达到配额而失败。
        for (var i = 0; i < 1950; i++) { // or 9950, depending on the account
          var childGroup = childGroups[i];
          console.log(childGroup.getEmail());
          Utilities.sleep(10000);
        }
      

      参考:

      【讨论】:

      • 非常感谢您的详细回复。我很感激。好吧,实际上异常是在`var childGroups = group.getGroups();` 处引发的,为了清楚起见,我注释掉了childGroup.getEmail() 部分。 (我已经更新了问题。)但我仍然遇到同样的异常。
      • 简而言之,只有group.getGroups()会导致异常。
      • 嗨@NaokiIshihara,该函数运行了多长时间才失败?
      • 一个命令导致这个问题对我来说是相当新的和奇怪的。我已经查过了,不知何故无法找到类似的问题。 @NaokiIshihara
      • 我测试了一个组改变子组的数量。 # 组 1 到 7:总是成功。第 8 组:有时会失败。第 9 组:有时成功。第 10 组中的 # 个:总是失败。看起来你是对的。 getGroups() 有限制。只有当子组的数量为 7 或更少时,我们才能使用它。虽然不方便。有没有办法报告这个错误?
      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 2015-05-13
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2016-04-04
      相关资源
      最近更新 更多