所以,讓我們這樣想:我有 20 個資料單元,其中每個單元的處理需要 1 分鐘來處理(總共處理 20 分鐘),一個應用程式腳本函式的最大執行時間是(360 秒) ,問題是我不想手動將它們分成 4 個并行執行,所以我想到了這個:
制作一個驅動程式功能以一次獲取 20 個單位 2) 檢查當前觸發器。
如果有 < 20 個觸發器,則將單位除以可用觸發器以創建某種并發性(如果 n 個觸發器 atm 為 0,則整個執行將在 1 分鐘內完成。
如果 >=20(最大限制)睡眠一分鐘,然后再次檢查可用觸發器
運行一個函式來在它完成執行后洗掉每個觸發器。
那么這是可以實作的還是有更好的方法來解決最大執行時間和應用程式腳本中的并發問題?
uj5u.com熱心網友回復:
我相信你的目標如下。
- 你有 20 個單位。
- 在每個單位,您都希望轉換資料。
- 您已經創建了用于轉換資料的腳本。
- 您想使用 Google Apps 腳本來實作這一點。
- 您希望降低此程序的成本。
問題和解決方法:
不幸的是,在當前階段,沒有方法可以通過異步行程直接運行 Google Apps 腳本。因此,為了實作您的目標,需要考慮一種解決方法。在這個答案中,我想提出一個解決方法。此變通方法的流程如下。
- 已部署 Web 應用程式。
- 您當前用于轉換資料的腳本與 Web Apps 一起使用。
- 為了實作異步程序,使用了 Google Apps 腳本庫。參考
- 該庫使用類 UrlFetchApp 的 fetchAll 方法實作異步處理。參考
這樣,腳本就可以與異步行程一起運行。
用法:
1. 安裝庫。
請將庫安裝到您當前的 Google Apps 腳本專案中。您可以在此處查看安裝方法。
2. 準備示例腳本。
// This is your current script.
function myFunction(e) {
// do something.
//return result; // Please return the values you want to return.
return e; // This is a sample return value for testing this script.
}
function doPost(e) {
return RunAll.RunFunctionsByDoPost(this, e);
}
// Please run this function.
function main() {
var url = "https://script.google.com/macros/s/###/dev"; // Here, please set the URL of Web Apps.
var token = ScriptApp.getOAuthToken();
var resource = [
{
functionName: "myFunction",
arguments: "sample parameter 1", // Please set the value you want to give.
webAppsURL: url,
accessToken: token,
},
{
functionName: "myFunction",
arguments: "sample parameter 2", // Please set the value you want to give.
webAppsURL: url,
accessToken: token,
},
{
functionName: "myFunction",
arguments: "sample parameter 3", // Please set the value you want to give.
webAppsURL: url,
accessToken: token,
},
];
var res = RunAll.DoWebApps(resource);
res.forEach(function (r) {
Logger.log(r.getContentText());
});
}
- 這是一個示例腳本。當然,您可以創建
resouece使用回圈的價值。
3. 部署 Web 應用程式
- 在腳本編輯器上,通過“發布”->“部署為 Web 應用程式”打開一個對話框。
- 為“將應用程式執行為:”選擇“用戶訪問 Web 應用程式”或“我”。
- 為“誰有權訪問應用程式:”選擇“僅限我自己”。
- 通過此設定,只有您是所有者才能訪問 Web 應用程式。如果設定“任何人,甚至匿名”,則所有知道Web Apps URL 的人都可以訪問。所以請小心。
- 單擊“部署”按鈕作為新的“專案版本”。
- 自動打開“需要授權”對話框。
- 單擊“查看權限”。
- 選擇自己的帳戶。
- 在“此應用程式未經驗證”處單擊“高級”。
- 點擊“轉到###專案名稱###(不安全)”
- 單擊“允許”按鈕。
- 復制“Test web app for your latest code.”的“latest code”的 URL。
- 就像
https://script.google.com/macros/s/###/dev.
- 就像
- 單擊“確定”。
- 這樣,即使在部署 Web Apps 的專案中的腳本被修改時,也可以自動使用最新的腳本。
- 在此設定中,專案中部署的 Web 應用程式是從同一專案中的腳本訪問的。
4. 測驗:
當上面的腳本運行時,當你的設定正確時,得到以下結果。
{"FunctionName":"myFunction","Arguments":"sample parameter 1","Result":"sample parameter 1"}
{"FunctionName":"myFunction","Arguments":"sample parameter 2","Result":"sample parameter 2"}
{"FunctionName":"myFunction","Arguments":"sample parameter 3","Result":"sample parameter 3"}
筆記:
- 當我測驗這個腳本時,最大工人數是 29。所以我認為這個解決方法可能適用于你的情況。但我不確定你的實際腳本。所以當這個號碼不能使用時,請修改它。
參考:
- 基準測驗:Google Apps 腳本的 UrlFetch 服務中的 fetchAll 方法
- 全部運行
- 這是一個僅使用本機 Google Apps 腳本 (GAS) 運行并發處理的庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389697.html
