Lambda 函数将其变量值存储多长时间?
How long does Lambda function store its variable value?
我创建了一个 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 分钟准确一次?
找到我的答案!为了刷新每次调用的时间,我必须放置作业,即
current_time = datetime.now()
在 lambda_handler
内。这使得 current_time
成为局部变量而不是全局变量。全局变量在多次调用中存储其值。
请参阅 Operating Lambda: Performance optimization 了解环境重用。
在冷启动时,您的 module-level 初始化代码将是 运行(导致 current_time 被设置为 `datetime.now()),但在热启动时,您的 module-level 初始化不是 运行,但是先前调用的初始化 module-level 值仍然存在。
这是一项有用的功能,因为它允许通过 Lambda 函数完成某种级别的缓存。但是,您不能 100% 依赖它,因为您的函数不会总是 warm-started.
我创建了一个 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 分钟准确一次?
找到我的答案!为了刷新每次调用的时间,我必须放置作业,即
current_time = datetime.now()
在 lambda_handler
内。这使得 current_time
成为局部变量而不是全局变量。全局变量在多次调用中存储其值。
请参阅 Operating Lambda: Performance optimization 了解环境重用。
在冷启动时,您的 module-level 初始化代码将是 运行(导致 current_time 被设置为 `datetime.now()),但在热启动时,您的 module-level 初始化不是 运行,但是先前调用的初始化 module-level 值仍然存在。
这是一项有用的功能,因为它允许通过 Lambda 函数完成某种级别的缓存。但是,您不能 100% 依赖它,因为您的函数不会总是 warm-started.