Google Apps 脚本 6 分钟执行时间限制
Posted
技术标签:
【中文标题】Google Apps 脚本 6 分钟执行时间限制【英文标题】:Google apps script 6 minute execution time limit 【发布时间】:2016-12-23 18:38:28 【问题描述】:我正在通过存储过程将数据从 google 表格复制到 mysql 表中。这张表有大约 3000 多条记录。在复制了大约 2000 条记录后,我达到了 6 分钟的执行时间限制。有没有办法解决这个 6 分钟的执行时间限制。
function myfunction()
var colA;
var colB;
var colC;
var colD;
var colE;
var mysqldb = Jdbc.getConnection("jdbc:mysql;dbipaddress","user","pa$$word");
var sql = mysqldb.createStatement();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++)
colA = data[i][0];
colB = data[i][1];
colC = data[i][2];
colD = data[i][3];
colE = data[i][4];
var query = "call [dbo].[sp_copygsheets](?,?,?,?,?)";
sql = mysqldb.prepareCall(query);
sql.setString(1, colA);
sql.setString(2, colB);
sql.setString(3, colC);
sql.setString(4, colD);
sql.setString(5, colE);
sql.executeUpdate();
sql.close();
mysqldb.close();
【问题讨论】:
Exceeded maximum execution time in Google Apps Script的可能重复 来自 Google Apps 脚本 JDBC 页面:Batching is vital for bulk operations
。查看此页面上的批处理示例:developers.google.com/apps-script/guides/jdbc
【参考方案1】:
由于无法访问要测试的 SQL 数据库,并且几乎没有在 Google AppScripts 中使用 JDBC 的经验,我将不得不做出一些假设
我会假设for
循环中执行时间的最大部分
for (var i = 1; i < data.length; i++)
...
如果是这样,您是否尝试过将循环限制为在 6 分钟的时间限制内完成并将i
的最后一个值保存为user property?然后您可以多次运行该脚本,直到该脚本被标记为已完成(例如,另一个用户属性)。
例如比如:
var startVal = PropertiesService.getUserProperties().getProperty("lastLoop");
for (var i = startVal; i < numLoops; i++)
...
var newProp = myStartVal: startVal+numLoops;
PropertiesService.getUserProperties().setProperties(newProp);
然后将脚本设置为时间触发器并让它运行直到 numLoops
等于 data.length
,这可以在执行 for 循环之前进行测试。
不是一个完整的答案,但我希望它能让你朝着正确的方向前进。
【讨论】:
我想补充一点,我觉得这并不真正值得回答,但更适合作为简短评论,但声誉低于 50 我无法添加 cmets,所以为部分答案道歉。以上是关于Google Apps 脚本 6 分钟执行时间限制的主要内容,如果未能解决你的问题,请参考以下文章
获取“Google Apps 脚本”“该脚本无权执行该操作。”随机
使用 Google Apps 脚本在 GmailApp 中限制 250 / 500 个线程
如何使用 Google Apps 脚本执行 API + Java 创建 Google 表单?