我已经在Python中为AWS构建了一个lambda函数,该函数使用aiohttp
发出了一些请求。
如AWS documentation所述,
您的Lambda函数代码中的任何声明(在处理程序代码之外,请参阅编程模型)都将保持初始化,从而在再次调用该函数时提供其他优化。例如,如果您的Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中将使用原始连接。
所以我将aiohttp.ClientSession()
放在了handle函数之外,因此将来的lambda函数可能会重用它:
http_session = None
def handle(event, context):
global http_session
# http_session will be not None if context is reused
if http_session is None:
http_session = aiohttp.ClientSession()
# [...] Use http_session here
但是,在不再使用await session.close()
时(即上下文被丢弃时),我必须关闭该连接。我无法在http_session
中关闭handle
,因为这将完全消除连接被重用的可能性。
考虑到这一点,我有什么选择?
谢谢。
答案 0 :(得分:1)
但是,我必须在不再使用它之后(即上下文被丢弃时),使用await session.close()关闭该连接。我无法在句柄中关闭http_session,因为它会完全消除重新使用连接的可能性。
是的,没错。如果您将其关闭,则不再是持久连接。
- 有一种在上下文删除时执行特定代码的方法。
我从没听说过上下文放置挂钩。在AWS文档中也找不到类似的东西。
- 简单地打开连接,它会在某个时候自行关闭。
这就是我现在在公司处理的方式,以及在互联网上找到的大多数示例。保持连接打开很安全。如果一段时间未使用服务器,则服务器将关闭连接。在服务器端配置关闭连接的时间(保持活动超时)。每个服务器的默认值都不同。例如。只需5到10秒。