AWS Lambda - 如果我启动一个线程,当 Lambda 被冻结/解冻时会发生什么情况?

我有一个基于Java的AWS Lambda函数,可以启动一个后台线程。线程运行向外部服务报告指标的计划任务。

根据 Lambda 文档,Lambda 函数在执行完成后将被“冻结”一段时间,如果在短时间内再次触发该函数,则可以“解冻”并重新使用。

我的问题是关于发生这种情况时后台线程会发生什么。例如,假设我在包含我的处理程序函数的类的构造函数中启动了后台线程。根据文档,处理程序函数范围之外的所有变量都将保持初始化状态,因此我的线程应该仍然存在,但它仍然会运行吗?我的线程在后台运行的事实是否会阻止 Lambda 首先完成执行?还是仅仅因为它尚未完全完成而超过五分钟限制,即使处理程序函数已完成?


答案 1

此问题已在 AWS 官方博客中得到解决:

但是,假设您在函数完成时运行了一个后台进程 - 如果重用容器,会发生什么情况?在这种情况下,Lambda 实际上会“冻结”进程,并在您下次调用函数时将其解冻(但前提是容器被重用,这并不能保证)。因此,在重用的情况下,您的后台进程仍将存在,但是在您离开时它们不会执行。


答案 2