我創建了一個 lambda 腳本只是為了了解 lambda 腳本存盤其變數值的時間。在此之前,我的理解是它只存盤到函式停止。但是當我每 5 分鐘運行一次以下腳本時(在 EventBridge 的幫助下),我得到了以下輸出:
from datetime import datetime
current_time = datetime.now()
def lambda_handler(event, context):
print(current_time)
輸出(每隔 5 分鐘)
06:16AM: 061649
06:21AM: 061649
06:26AM: 061649
06:31AM: 061649
06:36AM: 061649
...
08:39AM: 083934
08:44AM: 083934
08:49AM: 083934
08:54AM: 083934
08:59AM: 083934
...
10.41AM: 104149
10.46AM: 104149
10.51AM: 104149
10.56AM: 104149
...
在我看來,我的 Lambda 腳本只在 2-3 小時后重新運行,而不是每 5 分鐘重新運行一次。有誰知道為什么會這樣?以及如何使其每 5 分鐘準確一次?
uj5u.com熱心網友回復:
請參閱操作 Lambda:性能優化以了解環境重用。
在冷啟動時,您的模塊級初始化代碼將運行(導致 current_time 設定為 `datetime.now()),但在熱啟動時,您的模塊級初始化不會運行,但是初始化的模塊級值從先前的呼叫仍然存在。
這是一個有用的功能,因為它允許 Lambda 函式完成某種程度的快取。但是,您不能 100% 依賴它,因為您的函式并不總是熱啟動的。
uj5u.com熱心網友回復:
找到了我的答案!為了重繪 每次呼叫的時間,我必須放置作業,即
current_time = datetime.now()
內lambda_handler。這使得current_time區域變數而不是全域變數。全域變數在多個呼叫中存盤其值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472615.html
