Python - 如何在AWS Lambda

时间:2018-05-23 08:57:28

标签: 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.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)

虽然它有效,但我想知道:在AWS Lambda中优雅地处理超时是否有比这更好的做法?

1 个答案:

答案 0 :(得分:2)

观看get_remaining_time_in_millis是抢占lambda超时的最佳/推荐方式;没有特殊事件会被调用以让您知道您正在要超时

在不知道具体细节的情况下,您可以通过查看接收错误所花费的时间来推断在客户端超时。但是,我希望您的解决方案是让lambda明确一些。