Ha superato il tempo massimo di esecuzione nello script di Google Apps

Ho uno script di app che riceve costantemente questo errore. Giudicato dall’email di notifica, sembra che il limite di tempo sia 5 minuti. Qualcuno sa se c’è un modo per estendere questo limite di tempo? O forse c’è un modo per chiamare nuovamente Apps Script e riprende da dove era stato interrotto? Qualsiasi aiuto è apprezzato.

Una cosa che potresti fare (questo ovviamente dipende da ciò che stai cercando di realizzare) è:

  1. Memorizza le informazioni necessarie (ad es. Come un contatore di loop) in un foglio di calcolo o in un altro archivio permanente (ad es. ScriptProperties).
  2. Fai terminare la tua sceneggiatura ogni cinque minuti circa.
  3. Impostare un trigger temporizzato per eseguire lo script ogni cinque minuti (o creare un trigger a livello di programmazione utilizzando il servizio Script ).
  4. Ad ogni analisi, leggi i dati salvati dallo store permanente che hai utilizzato e continua a eseguire lo script da dove era stato interrotto.

Questa non è una soluzione adatta a tutti, se pubblichi il tuo codice, le persone saranno in grado di aiutarti meglio.

Ecco un estratto di codice semplificato da uno script che uso ogni giorno:

function runMe() { var startTime= (new Date()).getTime(); //do some work here var scriptProperties = PropertiesService.getScriptProperties(); var startRow= scriptProperties.getProperty('start_row'); for(var ii = startRow; ii <= size; ii++) { var currTime = (new Date()).getTime(); if(currTime - startTime >= MAX_RUNNING_TIME) { scriptProperties.setProperty("start_row", ii); ScriptApp.newTrigger("runMe") .timeBased() .at(new Date(currTime+REASONABLE_TIME_TO_WAIT)) .create(); break; } else { doSomeWork(); } } //do some more work here } 

NOTA 1: la variabile REASONABLE_TIME_TO_WAIT dovrebbe essere abbastanza grande da far scattare il nuovo trigger. (L’ho impostato su 5 minuti ma penso che potrebbe essere inferiore a quello).

NOTA 2: doSomeWork() deve essere una funzione che esegue relativamente veloce (direi meno di 1 minuto).

NOTA 3: Google ha deprecato le Script Properties e ha introdotto il Properties Service al suo posto. La funzione è stata modificata di conseguenza.

Inoltre, prova a ridurre al minimo la quantità di chiamate ai servizi Google. Ad esempio, se si desidera modificare un intervallo di celle nei fogli di calcolo, non leggerli singolarmente, modificarli e ripristinarli. Leggere invece l’intero intervallo (utilizzando Range.getValues ​​() ) in memoria, modificarlo e memorizzarlo tutto in una volta (utilizzando Range.setValues ​​() ).

Questo dovrebbe farti risparmiare un sacco di tempo per l’esecuzione.

La risposta di Anton Soradoi sembra OK ma considera l’utilizzo di Cache Service invece di memorizzare i dati in un foglio temporaneo.

  function getRssFeed() { var cache = CacheService.getPublicCache(); var cached = cache.get("rss-feed-contents"); if (cached != null) { return cached; } var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml"); // takes 20 seconds var contents = result.getContentText(); cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes return contents; } 

Si noti inoltre che ad aprile 2014 la limitazione del runtime di script è di 6 minuti .

Ho usato ScriptDB per salvare la mia posizione durante l’elaborazione di una grande quantità di informazioni in un ciclo. Lo script può / supera il limite di 5 minuti. Con l’aggiornamento di ScriptDb durante ogni esecuzione, lo script può leggere lo stato dal db e riprendere da dove è stato interrotto fino al completamento dell’elaborazione. Prova questa strategia e penso che sarai soddisfatto dei risultati.

Se utilizzi la versione di G Suite Business o Enterprise. Puoi registrare l’accesso anticipato per App Maker dopo che il creatore di app ha abilitato lo script a eseguire il runtime aumenterà il tempo di esecuzione da 6 minuti a 30 minuti 🙂

Maggiori dettagli sul produttore di applicazioni Fai clic qui