Google app script timeout ~ 5 minutes?

2019-07-18 12:38发布

我的谷歌应用程序脚本通过用户的谷歌驱动文件和复印迭代,有时将文件移动到其他文件夹。 5分钟日志中没有错误消息后脚本始终停止。

我整理几十或有时数以千计的文件在一个运行。

是否有任何设置或变通方法?

Answer 1:

配额

的最大执行时间为单个脚本是6分钟/执行
- https://developers.google.com/apps-script/guides/services/quotas

但也有其他的限制,以熟悉。 例如,你只允许1小时/天的总运行时间触发,所以你不能只是将一个长功能分为12个不同的5钟座。

优化

这就是说,还有为什么你真的需要六分钟执行非常少的原因。 JavaScript的应该没有问题排序数千行数据在一两秒钟。 什么是有可能伤害你的表现是服务调用谷歌应用程序本身。

您可以编写脚本来走的内置缓存的最大的优势,通过减少数量的读取和写入。 交替读取和写入命令是缓慢的。 为了加快一个脚本,读取的所有数据与一个命令的数组,该数组中的数据进行任何操作,并且将数据写出来用一个命令。
- https://developers.google.com/apps-script/best_practices

配料

你能做的最好的事情就是降低服务电话号码。 谷歌允许的大部分API调用批处理版本支持这个。

作为一个简单的例子, 取而代之的是

for (var i = 1; i <= 100; i++) {
  SpreadsheetApp.getActiveSheet().deleteRow(i);
}

这样做

SpreadsheetApp.getActiveSheet().deleteRows(i, 100);

在第一循环中,你不仅需要100调用deleteRow在纸张上,但你也需要得到积极片100次为好。 第二个变化应该执行幅度比第一批好几个数量级。

交织读取和写入

此外,您也应该非常小心,不要来回经常阅读和写作之间。 你不仅会失去在批处理操作的潜在收益,但谷歌将无法使用其内置的缓存。

你读每一次,我们必须先空(提交)写入缓存,以确保您正在阅读的最新数据(你可以通过调用强制高速缓存的写入SpreadsheetApp.flush() 同样,每次你做一个写的时候,我们要扔掉读取高速缓存,因为它不再有效。 因此,如果你能避免交错读取和写入,你会得到缓存的全部好处。
- http://googleappsscript.blogspot.com/2010/06/optimizing-spreadsheet-operations.html

例如,而不是这样的

sheet.getRange("A1").setValue(1);
sheet.getRange("B1").setValue(2);
sheet.getRange("C1").setValue(3);
sheet.getRange("D1").setValue(4);

这样做

sheet.getRange("A1:D1").setValues([[1,2,3,4]]);

链接功能调用

作为最后的手段,如果你的函数真的无法完成下六分钟就可以链接在一起来电或打破你的函数,在较小的数据段工作。

你可以存储在数据缓存服务 (临时)或属性服务 (永久)铲斗用于在执行检索(因为谷歌Apps脚本有一个无状态的执行)。

如果你想揭开序幕另一个事件,你可以用创建自己的触发器触发生成器类或设置在紧的时间表重复触发。



Answer 2:

想出一个办法来分散你的工作,所以只需要不到6分钟,因为这是对任何脚本的限制。 在第一遍,你可以迭代和文件和文件夹列表存储在电子表格中,并添加一个时间驱动触发第2部分。

在第2部分,当你处理它删除列表中的每个条目。 当有列表中没有的项目,删除触发器。

这是我如何处理的约1500行时,被传播到约十几种不同的电子表格片。 由于电话到电子表格的数量,时间到,而是继续当扳机再次运行。



Answer 3:

我已经开发了使用UserProperties和方案触发运行批处理的超出6分钟谷歌Apps脚本库。 你可以在你的气项目导入这个库,并与API包装你的代码,以便它能够永远运行(这不是真的,我们是通过配额的相关小时触发可以运行数的限制)

你可以学习所有关于它在这里: http://patt0.blogspot.in/2014/08/continuous-batch-library-update-for.html



Answer 4:

如果你是一个企业客户,现在可以注册到App设备早期访问 ,其中包括灵活的配额 。

下柔性配额系统,例如硬配额限制被去除。 当他们到达配额限制的脚本不停止。 相反,他们推迟到配额可用,此时脚本执行恢复。 一旦开始使用配额,他们在常规速度重新填充。 对于合理使用,脚本延误是罕见的。



Answer 5:

如果您正在使用摹套房为商业,企业或EDU客户的执行时间运行脚本设置为:

30分钟/执行

请参阅: https://developers.google.com/apps-script/guides/services/quotas



文章来源: Google app script timeout ~ 5 minutes?