在没有随机 Utilities.sleep 的情况下处理 UrlFetch 速率限制的正确方法?

bum*_*kin 5 google-api google-docs google-sheets google-apps-script

我们的 Google Sheets 插件为用户提供了扩展的功能库。

问题是,每个函数运行都会执行一次 UrlFetch。因此,如果用户向下拖动列超过 100 次,他们可能会看到错误:“错误:短时间内服务调用次数过多:urlfetch”。

显然,一个常见的解决方案是在 UrlFetch 函数之前添加随机的睡眠位(例如https://productforums.google.com/forum/#!topic/docs/_lgg9hbU6k8)。但就没有其他办法解决这个问题吗?经过随机睡眠测试后,我可能会将限制增加到一次最多 200 个函数。

根本问题是我不知道实际的限制是什么。例如,当 Google 队列中同时有超过 100 个 UrlFetch 请求时,是否会达到速率限制?我试图真正了解我们的选择是什么,但甚至没有完全了解限制!

非常感谢您的帮助,特别是如果您是 Google 的人员:)。

小智 4

您的问题的答案是“当 Google 队列中同时有超过 100 个 UrlFetch 请求时,是否会达到速率限制?” 基本上是没有。限制不是 100 次调用。

如果满足以下条件之一,您将看到该错误(“错误:短时间内服务调用次数过多:urlfetch”):

  • 每分钟通过 urlfetch 发送或接收 22 MB 数据
  • 每分钟拨打 3,000 次或更多电话
  • ...或者如果您达到每日最高限额。通话和数据费率..

就您而言,听起来您在达到每日数据最大值或每日呼叫最大值之前收到错误消息,因此可能是每分钟数据条件:每分钟通过 urlfetch 发送或接收 22 MB。

可以通过 urlfetch 不断检查正在处理的字节数,并使用它,如果接近限制,则让函数休眠一分钟。不过,这有点烦人。

您可能需要考虑尝试提高该函数的效率,以便发送更少的数据或进行更少的调用。如何做到这一点在很大程度上取决于函数,我们需要查看代码才能在那里提出具体建议。

您可以在此处找到 Google 的配额: https: //cloud.google.com/appengine/docs/quotas#UrlFetch