Python-如何在AWS Lambda中优雅地处理超时

Python-如何在AWS Lambda中优雅地处理超时,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,我有一个lambda,需要它正常关闭并登录到外部系统。在查阅了一些有关该问题的文献后,我使用线程技术得出了以下解决方案: def lambda_handler(event, context): threshold_millis = 10 * 1000 # leave when there are only 10 seconds left que = queue.Queue() t = threading.Thread(target=lambda q, ev: q.pu

我有一个lambda,需要它正常关闭并登录到外部系统。在查阅了一些有关该问题的文献后,我使用线程技术得出了以下解决方案:

def lambda_handler(event, context):

    threshold_millis = 10 * 1000  # leave when there are only 10 seconds left
    que = queue.Queue()
    t = threading.Thread(target=lambda q, ev: q.put(do_work(ev)), args=(que, event))
    t.daemon = True
    t.start()

    while True:
        if context.get_remaining_time_in_millis() < threshold_millis:
            # Do some logging notifying the timeout
            return {
                "isBase64Encoded": False,
                "statusCode": 408,
                "headers": {'Content-Type': "application/json"},
                "body": "Request timed out"
            }

        elif not t.isAlive():
            response = que.get()
            return response

        time.sleep(1)
def lambda_处理程序(事件、上下文):
阈值_millis=10*1000#在只剩下10秒时离开
que=队列。队列()
t=threading.Thread(target=lambdaq,ev:q.put(do_work(ev)),args=(que,event))
t、 daemon=True
t、 开始()
尽管如此:
if context.get_剩余_时间_,单位为_millis()

虽然它可以工作,但我想知道:有没有比这更好的方法来优雅地处理AWS Lambda中的超时问题?

观看
以毫秒为单位获取剩余时间
是在Lambda中抢占超时的最佳/推荐方法;没有任何特殊事件会被调用以让您知道将要超时

在不知道具体情况的情况下,您可以通过查看接收错误所花的时间来推断客户端的超时。然而,我更希望你的解决方案是让lambda明确地表达出来