2017-02-01 4 views
4

Google Apps Script에 대해 6 분의 실행 시간 제한을 늘릴 수있는 방법이 있습니까? 그 대답은 G 비즈니스 스위트의 조기 액세스 프로그램이라고 생각했습니다. 실행 제한을 6 분에서 30 분으로 늘리기 위해 Early Access 프로그램에 참여할 수 있다면 G Business Suite에 대해 월 10 달러를 지불 할 수 있습니다. 그러나 G Suite Help Forum의 고문은 Early Access가 제한된 프로그램이라는 것을 말했고, 이는 내가 그것을 얻을 수 있다는 보장이 없음을 의미합니다.Google Apps 스크립트에서 6 분의 실행 한도를 늘리려면 어떻게해야하나요?

6 분 실행 제한을 늘릴 수있는 다른 방법이 있습니까?

이 질문에서 필자는 스크립트를 6 분 제한에 맞게 최적화하는 방법에 대한 아이디어를 요구하지 않습니다. (I이 현재의 질문에 대한 대답이 ". 아니, 다른 방법이 없다", 미래에 그 요청할 수 있습니다)

따라서,이 현재의 질문에 대한 적절한 답변은 다음과 같습니다

  • "아니오 Google App Script의 실행 제한을 6 분 늘릴 수있는 다른 방법은 없습니다. "
  • "예, 6 분 실행 제한을 늘릴 수있는 다른 방법이 있고, 이러한 방법은 ..."
+0

, 당신의 답변을 당신에게 제한을 늘릴 수있는 방법이 없다는 것을 특히 설명을 대단히 감사합니다. 장기 실행 스크립트를 다루는 정보에 감사드립니다. Google 문서에서 읽고 약 1500 행 50 열로 Google 스프레드 시트를 만드는 스크립트가 있습니다. PropertiesService에 저장할 수있는 것 이상이라고 가정합니다. 사용자가 시작점과 처리 할 수를 지정하는 스크립트 측면에서 생각한 다음 스크립트를 다시 실행합니다. 그래서 타이밍을 잡아서 트리거를 사용하여 다시 시작하는 것이 좋습니다. Peter와 Vytautas의 답변에 다시 한번 감사드립니다. –

+0

이 의견은 질문이 아니라 대답에 게시해야합니다. 그런데 [어떻게 대답합니까 @reply work?] (https://meta.stackexchange.com/q/43019/289691) –

답변

3

내가 실행> 육분을 작업 수십 있습니다. 나는 수년에 걸쳐 조정 한 "outerloop"스크립트 (아래)를 사용합니다. 소요되는 시간과 상관없이 각 작업을 완료까지 실행합니다.

설정 (단지 가이드 - 당신이 당신의 자신의 특정 시나리오에 적용 할 필요) :

  1. 변경 처리하려는 어떤에 선 var thingies =. 이상적으로는 배열이어야합니다.
  2. //do our work here 줄 뒤에 코드 추가
  3. outerLoop()이라는 함수에 대한 트리거를 x 시간/일마다 실행하도록 설정하십시오. doProcessWidgets()과 같은 의미있는 이름으로 바꿀 수 있습니다.

코드 : 내가 이해

G 스위트 조직의 경우
//automatically invoked from outerLoop()'s creation of a new trigger if required to get work done 
function outerLoopRepeating() { 
    outerLoop(); 
} 
// trigger this function 
function outerLoop() { 
    try { 
    var processingMessage = 'Initialising', isOverMaxRuntime = false, startTime = new Date(), // calc elapsed time 
     functionName = arguments.callee.name, repeatingFunctionName = functionName + 'Repeating'; //for logging, triggering 

    // Deletes all occurrences of the Repeating trigger we don't end up with undeleted time based triggers all over the place 
    //add library GASRetry MGJu3PS2ZYnANtJ9kyn2vnlLDhaBgl_dE 
    GASRetry.call(function(){ScriptApp.getProjectTriggers().forEach(function(i) { 
     if (i.getHandlerFunction() === repeatingFunctionName) {ScriptApp.deleteTrigger(i);} 
    });}); 

    Logger.log('========== Starting the "%s" function ==========', functionName); 

    // Handle max execution times in our outer loop 
    // Get start index if we hit max execution time last run 
    var start = parseInt(PropertiesService.getScriptProperties().getProperty(functionName + "-start")) || 0; 

    var thingies = ['stuff to process', 'in an Array',,,,]; // 
    for (var i = start ; i < thingies.length; i++) { 
     if (Math.round((new Date() - startTime)/1000) > 300) { //360 seconds is Google Apps Script max run time 
     //We've hit max runtime. 
     isOverMaxRuntime = true; 
     break; 
     } 
     //do our work here 
     Logger.log('Inside the for loop that does the xyz work. i is currently: %d', i); 
     var processingMessage = Utilities.formatString('%d of %d thingies: %s <%s>', i+1, thingies.length, thingyName, thingyId); 

     //do our work above here 
    } 
    if (isOverMaxRuntime) { 
     //save state in user/project prop if required 
     PropertiesService.getScriptProperties().setProperty(functionName + '-start', i); 
     //create another trigger 
     GASRetry.call(function(){ScriptApp.newTrigger(repeatingFunctionName).timeBased().everyMinutes(10).create();}); 
     Logger.log('Hit max run time - last iteration completed was i=%s', i-1); 
    } else { 
     Logger.log('Done all the work and all iterations'); 
     PropertiesService.getScriptProperties().deleteProperty(functionName + '-start'); 
     Logger.log('Completed processing all %s things with the "%s" function', thingies.length, functionName); 
    } 
    } catch (e) { 
    Logger.log('%s. While processing %s', JSON.stringify(e, null, 2), processingMessage); 
    throw e; 
    } 
} 
+0

답변을 명확히하기 위해 시간 제한을 늘릴 방법이 없습니다. 아이디어는 당신이 루프에있는 곳을 저장하는 것이며 스크립트를 계속 사용할 수 있습니다. 나는이 코드를 사용하지 말고 스크립트에 심어 놓고 모든 사람에게 적합한 형식이 아니므로 자신 만의 변형을 작성하라고 촉구합니다. 나는 평균이 얼마나 오래 걸릴지 말할 수 없기 때문에 내 방식이 상당히 다르다는 것을 알고있다. 그래서 평균 실행 시간을 계산하고 6 분 전에 남은 시간과 비교한다. – Vytautas

1

, 그것은 Early Access Program에 로그인하여 최대 실행 시간 제한을 제거 할 수 있습니다. Quotas for Google Services

유연한 할당량 초기 액세스에서

이 기능은 초기 액세스 기능 세트의 일부입니다. 따라서 현재 일부 개발자 만 액세스 할 수 있습니다.

일반적으로 스크립트 실행이 위의 제한 또는 제한 중 하나를 초과하면 스크립트 실행이 중지되고 적절한 오류 메시지가 반환됩니다. 이로 인해 의 스크립트 데이터가 잠재적으로 무기한 상태가 될 수 있습니다.

유연한 할당량 시스템에서는 이러한 하드 할당량 제한이 제거됩니다. 스크립트가 할당량 한도에 도달하면 스크립트가 중지되지 않습니다.대신 할당량이 사용 가능해질 때까지 지연된 입니다.이 시점에서 스크립트 실행이 다시 시작됩니다. 할당량이 사용되기 시작하면 에 정기적으로 할당량이 다시 채워집니다. 합리적 사용을 위해 스크립트 지연은 거의 없습니다.

EAP에 액세스 할 수없는 경우이 사이트에서 여러 가지 해결 방법이 공유됩니다. 일부 해결 방법을 사용하면 오류가 발생할 때까지 스크립트를 실행 한 다음 처리 할 다음 항목에서 스크립트를 다시 시작하고 다른 스크립트는 오류 조각을 피할만큼 작게 작업을 분할합니다. 관련 Q &

관련 문제