【发布时间】:2019-09-21 00:41:28
【问题描述】:
我在 Python 中为 AWS 构建了一个 lambda 函数,它使用 aiohttp 发出一些请求。
如 AWS documentation 所述,
您的 Lambda 函数代码(处理程序代码之外,请参阅编程模型)中的任何声明都保持初始化状态,从而在再次调用函数时提供额外的优化。例如,如果您的 Lambda 函数建立了数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。
所以我把 aiohttp.ClientSession() 放在了句柄函数之外,所以它可能会被未来的 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() 之后关闭与它的连接,也就是说,当上下文被丢弃时。我不能在handle 中关闭http_session,因为这将完全消除连接被重用的可能性。
考虑到这一点,我有什么选择?
- 只要让连接打开,它就会在某个时候自行关闭。
- 有一种方法可以在上下文删除时执行特定代码。
- 没有办法做我想做的事。
谢谢,提前。
【问题讨论】:
-
你是对的。如果你关闭它,它就不再是持久连接了。我从未听说过上下文挂钩。保持连接打开是非常安全的。如果一段时间后未使用,服务器将关闭连接。连接关闭的时间(保持活动超时)在服务器端配置。每个服务器的默认值都不同。例如。对于 Apache,它只有 5-10 秒。
-
好吧,如果让连接打开没有真正的问题,我认为这是要走的路。您能否给出答案,以便我接受它作为正确答案?
标签: python amazon-web-services aws-lambda