wrs*_*der 12 python amazon-web-services aws-lambda
AWS Lambda 中全局变量的范围或生命周期是多少?
例如,如果我这样做:
cache = {}
def lambda_handler(event, context):
# do something with "cache"
# do something else with "cache"
Run Code Online (Sandbox Code Playgroud)
cache
每次调用都会初始化一次(每次 Lambda 执行都有新的进程),还是一旦初始化此模块,它是否会重新用于多次调用?
小智 12
全局变量在同一执行环境中的调用之间保留其值。
库应该在处理程序外部的初始化代码中定义,以便在创建执行环境时加载它们一次。
源AWS
import boto3, json
client = boto3.resource('dynamodb', region_name='eu-west-1')
tbl = client.Table('my-dynamo-table')
mydata = {}
mydata["groups"] = []
def lambda_handler(event, context):
if len(mydata["groups"]) == 0:
# data is not cached, make call to dynamo
data = tbl.scan()
group_data = data['Items']
for group in group_data:
mydata["groups"].append(group['name'])
return mydata
else:
# return cached content
return mydata
Run Code Online (Sandbox Code Playgroud)
利用执行环境重用来提高函数的性能。在函数处理程序之外初始化 SDK 客户端和数据库连接,并将静态资源本地缓存在 /tmp 目录中。由同一函数实例处理的后续调用可以重用这些资源。这通过减少函数运行时间来节省成本。
Lambda 全局变量不会在每次调用时更新。您在处理函数中编写的任何内容都将在每次调用时被调用。
谈到全局变量的生命周期,只要初始化的容器保持运行状态(如果容器在一段时间内保持不活动状态,它就会关闭容器)或者代码被修改和重新部署,它就会一直存在。我们应该谨慎对待缓存的内容,即如果缓存的数据经常更新,那么将其存储在缓存中并不是一个好主意。
https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html
https://medium.com/tensult/aws-lambda-function-issues-with-global-variables-eb5785d4b876
归档时间: |
|
查看次数: |
11039 次 |
最近记录: |