【问题标题】:How to use Utilities.sleep() function如何使用 Utilities.sleep() 函数
【发布时间】:2012-06-23 22:06:04
【问题描述】:

Utilities.sleep() 函数的具体用途是什么?我们应该在函数调用或 API 调用之间使用它吗?

我在函数调用之间使用Utilities.sleep(1000),对吗?它会减慢执行时间吗?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    您还可以使用它来限制每秒的 API 拉取次数。一些网站会限制每秒 API 拉取次数,以减少垃圾邮件和服务器压力。

    【讨论】:

      【解决方案2】:

      Serge 是对的 - 我的解决方法:

      function mySleep (sec)
      {
        SpreadsheetApp.flush();
        Utilities.sleep(sec*1000);
        SpreadsheetApp.flush();
      }
      

      【讨论】:

      • 感谢您的提示!在我的试用中,似乎使用 SpreadsheetApp.flush(),我们可以完全摆脱使用 Utilities.sleep()。
      【解决方案3】:

      有些 Google 服务不太喜欢使用。最近我的帐户因为脚本而被锁定,该脚本每秒向同一用户发送两封电子邮件。谷歌将其视为垃圾邮件。所以在这里使用 sleep 也是有道理的,可以防止这种情况发生。

      【讨论】:

        【解决方案4】:

        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)
        }
        

        【讨论】:

        • 我与长期的 Google Apps 脚本开发人员交谈过,他建议在保存大量数据时使用 sleep 、删除、移动在下一行代码中处理数据/对象时可以很好地为云提供一点睡眠时间(例如 500 - 1000 毫秒)
        猜你喜欢
        • 2016-04-04
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 2019-03-27
        • 2021-12-02
        • 2021-11-22
        • 2018-01-04
        • 2019-09-21
        相关资源
        最近更新 更多