Я работаю над функцией python AWS Lambda, которая использует pydantic для проверки ввода. Недавно я обнаружил, что время ожидания Lambda истекло (с тайм-аутом 15 секунд) при выполнении следующего кода:
def _stringify(v):
return str(v)
class SomeModel(BaseModel):
a: int
_stringify = validator("a", allow_reuse=True)(_stringify)
SomeModel(a=12)
Я определил, что проблема возникает при вызове _stringify = validator("a", allow_reuse=True)(_stringify)
, который передает функцию _stringify декоратору валидатора. Это полностью функционально в локальной среде, но не в AWS Lambda. Следующее альтернативное определение SomeModel также работает в среде AWS Lambda.
class SomeModel(BaseModel):
a: int
@validator("a")
def stringify(cls, v):
return str(v)
Есть ли у кого-нибудь, кто лучше разбирается в AWS Lambda, какие-либо идеи относительно того, почему _stringify = validator("a", allow_reuse=True)(_stringify)
приводит к тайм-ауту, и можете ли вы предложить какие-либо возможные исправления?
(Примечание: альтернативное определение SomeModel нежелательно, поскольку оно нарушает принципы DRY, поскольку мы хотим использовать _stringify в нескольких моделях.)
Код не вызывает исключений при выполнении как локально, так и в среде Lambda.
Среда:
AWS Lambda
python 3.8 — пользовательская сборка среды выполнения с помощью Docker. Лямбда-слои, поддерживающие:
- пидантик — v1.6.1 (питон 3.8)
stringify = validator("a")(stringify)
после простого определения функции. Нерабочая версия - это в основном только часть после знака равенства - вы на самом деле ничего не определяете,SomeModel
никоим образом не зависит от строки кода. - person jasonharper   schedule 17.08.2020