48

What is the exact use of Utilities.sleep() function? Should we use it between function calls or API calls?

I use the Utilities.sleep(1000) in-between function calls, is it right? Will it slow down the execution time?

Jacob Schoen
  • 14,034
  • 15
  • 82
  • 102
balajiboss
  • 932
  • 2
  • 12
  • 20

4 Answers4

71

Utilities.sleep(milliseconds) creates a 'pause' in program execution, meaning it does nothing during the number of milliseconds you ask. It surely slows down your whole process and you shouldn't use it between function calls. There are a few exceptions though, at least that one that I know : in SpreadsheetApp when you want to remove a number of sheets you can add a few hundreds of millisecs between each deletion to allow for normal script execution (but this is a workaround for a known issue with this specific method). I did have to use it also when creating many sheets in a spreadsheet to avoid the Browser needing to be 'refreshed' after execution.

Here is an example :

function delsheets(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var numbofsheet=ss.getNumSheets();// check how many sheets in the spreadsheet
  for (pa=numbofsheet-1;pa>0;--pa){ 
    ss.setActiveSheet(ss.getSheets()[pa]);
    var newSheet = ss.deleteActiveSheet(); // delete sheets begining with the last one
    Utilities.sleep(200);// pause in the loop for 200 milliseconds
  }
  ss.setActiveSheet(ss.getSheets()[0]);// return to first sheet as active sheet (useful in 'list' function)
}
Serge insas
  • 45,904
  • 7
  • 105
  • 131
  • I was speaking with long time Google Apps Script developer and he recommended to use sleep when lots of data is being saved especially in spreadsheet and documents and you want to use them imidiately, also during the operation like copy, delete, move when you work with the data / object in next lines of code is good to provide the cloud with a little sleep time (like 500 - 1000 miliseconds) – Marek Čech Nov 10 '19 at 14:27
12

Serge is right - my workaround:

function mySleep (sec)
{
  SpreadsheetApp.flush();
  Utilities.sleep(sec*1000);
  SpreadsheetApp.flush();
}
juuulek
  • 141
  • 1
  • 2
  • 1
    Thank you for the tips! In my trial, it seems that with SpreadsheetApp.flush(), we can get rid of using Utilities.sleep() completely. – Lye Heng Foo Feb 25 '21 at 08:35
3

Some Google services do not like to be used to much. Quite recently my account was locked because of script, which was sending two e-mails per second to the same user. Google considered it as a spam. So using sleep here is also justified to prevent such situations.

Rafal
  • 31
  • 1
2

You can also use it to limit API pulls per second. Some websites limit the amount of API pulls per second to reduce spam and server stress.