如果我在 Lambda 中创建一个单例实例,并将 lambda 超时设置为 30 秒。下次调用时,如果使用相同的容器,我会获得相同的单例实例还是新的单例实例。我正在 lambda 处理程序中创建这个单例,并且使用 python。
小智 5
AWS Lambda 通过启动容器来处理请求。如果一个新的请求到达并且没有容器是空闲的,那么它会启动一个新的容器来执行这个请求。但是,如果存在当前未处理任何请求的容器,则新请求将被路由到此容器。
所以基本上如果使用相同的容器,您将获得相同的单例实例。但是,如果使用新容器来处理请求,您将获得一个新的单例实例。
您可以使用以下代码轻松测试它。这个 lambda 是从带有代理的 api 网关调用的,并且名称作为带有 GET 请求的查询参数发送。添加了 20 秒的延迟,以便多个执行可以在不同的容器中运行。
import json
import time
class Singleton:
__instance = None
@staticmethod
def getInstance(name):
""" Static access method. """
if Singleton.__instance == None:
Singleton(name)
print(Singleton.__instance.name)
return Singleton.__instance
def __init__(self,name):
""" Virtually private constructor. """
if Singleton.__instance != None:
raise Exception("This class is a singleton!")
else:
self.name = name
Singleton.__instance = self
def lambda_handler(event, context):
# TODO implement
param = event.get("queryStringParameters")
s = Singleton.getInstance(param.get("name"))
time.sleep(20)
return {
'statusCode': 200,
'body': json.dumps(s.name)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |