Stop a Lambda function in Python
在某个函数内,我希望停止整个lambda进程,但不触发错误。我试过通过查看上下文变量来停止它,或者只是调用exit(),但每次它都被视为一个错误,我不想跟踪它。
如何在Python中成功结束lambda进程?
- 你能把引发错误的代码贴出来吗?
- 如何在没有回溯的情况下退出python?
- @克里希纳只记录了exit(),它记录了Process exited before completing request,并将其记录为一个错误。
- @johnrotenstein我已经尝试了sys.exit(0)和os.exit(1),它们仍然被视为错误。
- 我已经重写了函数,所以它从主函数返回,主函数解决了它被标记为"错误"的问题,但仍然可以很好地知道。
- lambda像模块一样加载和执行函数的代码。这就是为什么您必须创建一个处理程序函数,而不只是使用一个普通的脚本入口点。当您像这样调用exit()时,您将杀死所有东西,而不是像lambda服务器所期望的那样从函数返回。换句话说,exit()总是会导致该错误消息。您需要从函数返回。
- @markb该选项在nodejs中通过contextstackoverflow.com/questions/38660024/&hellip提供;但是从我所见,python的context中没有提供。nodejs中的流程与python中的流程相同,那么为什么nodejs不抛出错误而python却抛出错误呢?
在aws lambda中,定义一个handler函数,在python中,函数只需要return就可以成功完成,其中return表示return None。
您所做的是正确的,只是在这个处理函数中有多个返回点。如果需要,您可以出于不同的原因记录消息以完成功能。
- 从内存来看,这是不容易实现的(我重构代码使其工作),因为它是一个从handler调用的函数,具有终止函数的条件。我认为我所做的是return,一个特定的字符串或一些可以从调用处理程序函数中检查的东西,然后根据它来检查return。我想我很好奇为什么lambda的nodejs版本有这种能力,但python没有。我在一段时间前就让它与重构器一起工作了,所以我的内存对它不是很好。
- 在另一个这样的问题中,提到了遗留的方法,例如context.done(),在更新的nodejs sdk中,您应该使用回调,而不是docs.aws.amazon.com/lambda/latest/dg/…该回调是可选的。文档提到,如果不这样做,它将隐式地执行回调,但这不是执行的结束,它只是为了方便登录到CloudWatch。javascript函数在事件循环结束时仍将完成,方法是返回一个显式值、一个隐式默认的undefined,或者抛出一个异常,与python相同。
- 在幕后,lambda运行程序只是一些包装函数、调用函数、传递事件和上下文并等待函数返回或引发异常的python(或node或其他lang)函数。当您调用处理程序内的其他函数时,您正在做同样的事情,最终这些其他函数必须完成并返回到处理程序。整个lambda的入口和出口点是且只能是处理程序函数。