43

Utilities.sleep()関数の正確な使用法は何 ですか?関数呼び出しとAPI呼び出しの間に使用する必要がありますか?

Utilities.sleep(1000)中間の関数呼び出しを使用していますが、正しいですか?実行時間が遅くなりますか?

4

4 に答える 4

66

Utilities.sleep(milliseconds)は、プログラムの実行時に「一時停止」を作成します。これは、要求されたミリ秒数の間は何も実行しないことを意味します。それは確かにあなたのプロセス全体を遅くします、そしてあなたは関数呼び出しの間にそれを使うべきではありません。ただし、いくつかの例外がありますが、少なくとも私が知っているものです。SpreadsheetAppでは、多数のシートを削除する場合、各削除の間に数百ミリ秒を追加して、通常のスクリプト実行を可能にすることができます(ただし、これはこの特定の方法に関する既知の問題)。実行後にブラウザを「更新」する必要がないように、スプレッドシートに多数のシートを作成するときにも使用する必要がありました。

次に例を示します。

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)
}
于 2012-06-21T16:11:23.313 に答える
10

セルジュは正しいです-私の回避策:

function mySleep (sec)
{
  SpreadsheetApp.flush();
  Utilities.sleep(sec*1000);
  SpreadsheetApp.flush();
}
于 2020-11-17T11:17:52.687 に答える
3

一部のGoogleサービスは、あまり使用されたくないものです。ごく最近、同じユーザーに1秒あたり2通の電子メールを送信するスクリプトが原因で私のアカウントがロックされました。Googleはそれをスパムと見なしました。したがって、このような状況を防ぐために、ここでスリープを使用することも正当化されます。

于 2020-11-05T16:38:48.107 に答える
0

これを使用して、1秒あたりのAPIプルを制限することもできます。一部のWebサイトでは、スパムとサーバーのストレスを軽減するために、1秒あたりのAPIプルの量を制限しています。

于 2021-09-17T15:55:28.063 に答える