为什么我总是收到“异常:服务在短时间内调用太多次:组读取在调用之间尝试 Utilities.sleep(1000)”? 可能的问题:您可以采取的可能步骤:参考:

问题描述

我刚刚运行了 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 小时内第一次运行脚本,我也会收到此异常。有什么建议吗?

解决方法

一定是getGroups()的限制。

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

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

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

,

可能的问题:

  • 有很多呼叫您的 getEmail()。即使函数被执行一次,在超过配额的短时间内,在循环内连续多次调用 childGroup.getEmail()
  • 每天读取的组数限制为 2000/10000(取决于您的帐户)。如果你的超过了这个限制,那么它就达到了配额。如果没有,那么它可能达到了每分钟/小时的配额(还没有找到文档,每分钟/小时是多少)

groups

您可以采取的可能步骤:

  • 将您的 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);
  }

参考:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...