如果我的脚本有很多用户,我是否需要 LockService getScriptLock
Do I need LockService getScriptLock if my script has many users
我的 html 表单使用 Google 脚本将数据上传到电子表格。我使用以下功能来防止冲突,因为许多用户正在访问 Web 应用程序页面:
function lockservice() {
var lock = LockService.getScriptLock();
lock.waitLock(30000);
lock.releaseLock();
}
我有另一个脚本来检索数据(单独的脚本),也有很多用户在访问它。那我还需要 getscriptlock
吗?
换句话说,用户之间是在获取数据时发生冲突,还是仅在上传时发生冲突?或者可能在这两种情况下。
如果您使用以下方式将数据写入电子表格:
sheet.appendRow(array);
那你写数据就不需要Lock Service了。如果您正在使用:
sheet.getRange().setValues(array_2_D);
那么您确实需要锁定服务。
所以,appendRow()
是 "atomic" 而 setValues()
不是。原子意味着每个操作彼此完全独立运行。
https://developers.google.com/apps-script/reference/spreadsheet/sheet?hl=en#appendRow(Object)
如果您有并发用户,获取值应该使用锁定服务。并发用户也有配额限制。 "Simultaneous Executions" 的限制是 30,(此时 post)
https://developers.google.com/apps-script/guides/services/quotas#current_limitations
其实我也有同样的理解但是:
我有一个脚本,其中使用了 Lock Service
,锁定的部分还包括对 sheet 的 appendRow()
操作。
该脚本最多允许 30 个并发执行。
尽管知道 appendRow()
被声明为原子的,但我现在体验到 appendRow()
实际上可能会覆盖 sheet 上最后使用的行!
我从未在不使用 Lock Service
的情况下经历过这种行为。
还有其他人观察到这种意外行为吗?
在链接的屏幕截图中,您会看到先前记录的新 Date()
值被替换,而不是在下面附加了整个新行。
非常感谢任何克服这种行为的想法和建议。
屏幕截图:appendRow() 替换了 sheet 的最后一行:
我的 html 表单使用 Google 脚本将数据上传到电子表格。我使用以下功能来防止冲突,因为许多用户正在访问 Web 应用程序页面:
function lockservice() {
var lock = LockService.getScriptLock();
lock.waitLock(30000);
lock.releaseLock();
}
我有另一个脚本来检索数据(单独的脚本),也有很多用户在访问它。那我还需要 getscriptlock
吗?
换句话说,用户之间是在获取数据时发生冲突,还是仅在上传时发生冲突?或者可能在这两种情况下。
如果您使用以下方式将数据写入电子表格:
sheet.appendRow(array);
那你写数据就不需要Lock Service了。如果您正在使用:
sheet.getRange().setValues(array_2_D);
那么您确实需要锁定服务。
所以,appendRow()
是 "atomic" 而 setValues()
不是。原子意味着每个操作彼此完全独立运行。
https://developers.google.com/apps-script/reference/spreadsheet/sheet?hl=en#appendRow(Object)
如果您有并发用户,获取值应该使用锁定服务。并发用户也有配额限制。 "Simultaneous Executions" 的限制是 30,(此时 post)
https://developers.google.com/apps-script/guides/services/quotas#current_limitations
其实我也有同样的理解但是:
我有一个脚本,其中使用了 Lock Service
,锁定的部分还包括对 sheet 的 appendRow()
操作。
该脚本最多允许 30 个并发执行。
尽管知道 appendRow()
被声明为原子的,但我现在体验到 appendRow()
实际上可能会覆盖 sheet 上最后使用的行!
我从未在不使用 Lock Service
的情况下经历过这种行为。
还有其他人观察到这种意外行为吗?
在链接的屏幕截图中,您会看到先前记录的新 Date()
值被替换,而不是在下面附加了整个新行。
非常感谢任何克服这种行为的想法和建议。
屏幕截图:appendRow() 替换了 sheet 的最后一行: