상호 배제 잠금의 표현입니다.
이 클래스를 사용하면 스크립트가 스크립트의 인스턴스 하나만 한 번에 지정된 코드 섹션을 실행하도록 할 수 있습니다. 이는 사용자 작업으로 인해 공유 리소스가 변경될 수 있고 충돌이 발생하지 않도록 하려는 콜백 및 트리거에 특히 유용합니다.
다음 예에서는 양식 제출 핸들러에서 잠금을 사용하는 방법을 보여줍니다.
// Generates a unique ticket number for every form submission. function onFormSubmit(e) { const targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1); // Gets a script lock before modifying a shared resource. const lock = LockService.getScriptLock(); // Waits for up to 30 seconds for other processes to finish. lock.waitLock(30000); const scriptProperties = PropertiesService.getScriptProperties(); const ticketNumber = Number(scriptProperties.getProperty('lastTicketNumber')) + 1; scriptProperties.setProperty('lastTicketNumber', ticketNumber); // Releases the lock so that other processes can continue. lock.releaseLock(); targetCell.setValue(ticketNumber); }
lastTicketNumber 속성이 ScriptProperties에서 읽은 후 새 값이 다시 쓰여지기 전에 변경될 수 있으므로 티켓 번호가 동일해질 수 있습니다.메서드
| 메서드 | 반환 유형 | 간략한 설명 |
|---|---|---|
has | Boolean | 잠금이 실행된 경우 true를 반환합니다. |
release | void | 잠금을 해제하여 잠금을 대기 중인 다른 프로세스가 계속 진행할 수 있도록 합니다. |
try | Boolean | 잠금을 실행하려고 시도하며 제공된 밀리초 후에 시간 초과됩니다. |
wait | void | 잠금을 실행하려고 시도하며 제공된 밀리초 후에 예외와 함께 시간 초과됩니다. |
자세한 문서
hasLock()
잠금이 실행된 경우 true를 반환합니다. tryLock(timeoutInMillis) 또는 waitLock(timeoutInMillis)이 호출되지 않았거나, 잠금을 검색하기 전에 시간 초과되었거나, releaseLock()이 호출된 경우 이 메서드는 false를 반환합니다.
const lock = LockService.getScriptLock(); lock.tryLock(10000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); }
리턴
Boolean — 잠금이 실행된 경우 true, 그렇지 않은 경우 false입니다.
releaseLock()
잠금을 해제하여 잠금을 대기 중인 다른 프로세스가 계속 진행할 수 있도록 합니다. 스크립트가 종료되면 잠금이 자동으로 해제되지만 효율성을 위해 코드 섹션에 대한 독점 액세스가 더 이상 필요하지 않으면 잠금을 해제하는 것이 좋습니다. 잠금이 실행되지 않은 경우 이 메서드는 영향을 주지 않습니다.
스프레드시트를 사용하는 경우 잠금을 해제하기 전에 SpreadsheetApp.flush()를 호출하여 스프레드시트에 대한 독점 액세스 권한이 있는 동안 보류 중인 모든 변경사항을 스프레드시트에 커밋해야 합니다.
const lock = LockService.getScriptLock(); lock.waitLock(10000); // Do some work on a shared resource. lock.releaseLock();
tryLock(timeoutInMillis)
잠금을 실행하려고 시도하며 제공된 밀리초 후에 시간 초과됩니다. 잠금이 이미 실행된 경우 이 메서드는 영향을 주지 않습니다.
const lock = LockService.getScriptLock(); const success = lock.tryLock(10000); if (!success) { Logger.log('Could not obtain lock after 10 seconds.'); }
매개변수
| 이름 | 유형 | 설명 |
|---|---|---|
timeout | Integer | 잠금을 실행하기 위해 대기하는 시간(밀리초)입니다. |
리턴
Boolean — 잠금이 실행된 경우 true, 그렇지 않은 경우 false입니다.
waitLock(timeoutInMillis)
잠금을 실행하려고 시도하며 제공된 밀리초 후에 예외와 함께 시간 초과됩니다. 이 메서드는 false를 반환하는 대신 잠금을 실행할 수 없는 경우 예외를 발생시킨다는 점을 제외하면 tryLock(timeoutInMillis)과 동일합니다.
const lock = LockService.getScriptLock(); try { lock.waitLock(10000); } catch (e) { Logger.log('Could not obtain lock after 10 seconds.'); }
매개변수
| 이름 | 유형 | 설명 |
|---|---|---|
timeout | Integer | 잠금을 실행하기 위해 대기하는 시간(밀리초)입니다. |
생성 값
Error — 잠금을 실행하기 전에 메서드가 시간 초과된 경우