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



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

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

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

这在AWS官方博客中得到了解决:

但是假设你有一个后台进程在运行,当函数完成-如果容器被重用会发生什么?在这个在这种情况下,Lambda实际上会"冻结"过程并将其解冻下次调用该函数时(但如果容器是,则只能)重用,这不是保证)。在重用的情况下,你的后台进程仍然存在,但它们将不复存在当你不在时执行。

最新更新