Python - Как изящно обрабатывать таймауты в AWS Lambda - PullRequest
0 голосов
/ 23 мая 2018

У меня есть лямбда, которая мне нужна для корректного выключения и входа во внешнюю систему.Посмотрев некоторую литературу по этому вопросу, я нашел следующее решение с использованием потоков:

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 голосов
/ 08 октября 2018

Просмотр get_remaining_time_in_millis - лучший / рекомендуемый способ прерывания времени ожидания в лямбде;нет никаких специальных событий, которые бы вызывали, чтобы вы знали, что вы собираетесь на тайм-аут.

Не зная специфики, вы могли бы вывести тайм-аут на клиентесторона, посмотрев на то, как долго вы получили сообщение об ошибке.Однако я бы предпочел, чтобы ваше решение о лямбде было явным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...