我正在使用 Google 提供的应用脚本通过工作表访问他们的预测 API。我试图一次预测数千行,但是,在 6 分钟后,代码停止时达到了最大执行时间。
我实现了一个使用时钟触发器构建器找到的解决方案。一旦我运行该功能,它会持续 5 分钟,然后它会停止设置触发器以在 2 分钟内调用该功能。
主要问题是函数在调度时没有被调用。我在当前的触发器列表中看到它,但它再也不会被调用。您能否解释一下为什么会发生这种情况。
我的意图是在 5 分钟内预测尽可能多的行,然后停止设置触发器以在几分钟内再次调用预测函数,从它停止的地方开始并继续,直到预测到任何元素。
我还需要知道如何将值存储在缓存中,以便在再次调用函数时知道它需要的所有信息。
//This is the function that is used to predict a selection of data
function predict() {
try {
clearOutput();
var startTime= (new Date()).getTime();
var sheet = SpreadsheetApp.getActiveSheet();
var selection = sheet.getActiveSelection();
var instances = selection.getValues();
var project_number = getProjectNumber();
var model_name = getModelName();
var startRow = stRow;
var MAX_RUNNING_TIME = 300000;
var REASONABLE_TIME_TO_WAIT = 60000;
for (var i = startRow; i < instances.length; ++i) {
var currTime = (new Date()).getTime();
if(currTime - startTime >= MAX_RUNNING_TIME) {
var builder = ScriptApp.newTrigger('predict').timeBased().after(REASONABLE_TIME_TO_WAIT);
builder.create();
break;
} else {
var result = predictSingleRow(project_number, model_name, instances[i]);
selection.getCell(i + 1, 1).setValue(result);
}
}
} catch(e) {
Browser.msgBox('ERROR:' + e, Browser.Buttons.OK);
}
}