Cor*_*rry 48 google-apps-script
我有一个不断收到此错误的Apps脚本.通过通知邮件判断,看起来时间限制是5分钟.有谁知道是否有办法延长这个时间限制?或者是否有办法再次调用Apps脚本,它从它停止的地方开始提取?任何帮助表示赞赏.
Ant*_*doi 68
你可以做的一件事(这当然取决于你想要完成的事情)是:
这不是一个适合所有人的解决方案,如果您发布您的代码,人们将能够更好地为您提供帮助.
这是我每天使用的脚本的简化代码摘录:
function runMe() {
var startTime= (new Date()).getTime();
//do some work here
var scriptProperties = PropertiesService.getScriptProperties();
var startRow= scriptProperties.getProperty('start_row');
for(var ii = startRow; ii <= size; ii++) {
var currTime = (new Date()).getTime();
if(currTime - startTime >= MAX_RUNNING_TIME) {
scriptProperties.setProperty("start_row", ii);
ScriptApp.newTrigger("runMe")
.timeBased()
.at(new Date(currTime+REASONABLE_TIME_TO_WAIT))
.create();
break;
} else {
doSomeWork();
}
}
//do some more work here
}
Run Code Online (Sandbox Code Playgroud)
注意#1:变量REASONABLE_TIME_TO_WAIT应该足够大,以便触发新的触发器.(我把它设置为5分钟,但我认为它可能会少于此).
注意#2:doSomeWork()必须是执行速度相对较快的功能(我会说不到1分钟).
注意#3:谷歌已弃用Script Properties,并将Properties Service其引入.该功能已相应修改.
ron*_*nme 28
此外,尽量减少对谷歌服务的通话量.例如,如果要更改电子表格中的单元格范围,请不要读取每个单元格,对其进行修改并将其存储回来.而是将整个范围(使用Range.getValues())读入内存,将其变异并立即存储所有内容(使用Range.setValues()).
这应该可以节省大量的执行时间.
Liy*_*ali 14
Anton Soradoi的答案似乎没问题,但考虑使用缓存服务而不是将数据存储到临时表中.
function getRssFeed() {
var cache = CacheService.getPublicCache();
var cached = cache.get("rss-feed-contents");
if (cached != null) {
return cached;
}
var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml"); // takes 20 seconds
var contents = result.getContentText();
cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
return contents;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我已经使用ScriptDB来保存我的位置,同时在循环中处理大量信息.该脚本可以/确实超过5分钟的限制.通过在每次运行期间更新ScriptDb,脚本可以从db读取状态并从中断处继续,直到所有处理完成.试试这个策略,我想你会对结果感到满意.
小智 5
如果您使用的是G Suite Business或企业版.在App maker启用脚本运行运行时,您可以注册App Maker的早期访问权限,将运行时间从6分钟增加到30分钟 :)
关于app maker的更多细节点击这里
| 归档时间: |
|
| 查看次数: |
64653 次 |
| 最近记录: |