Python 为什么AWS Lambda在将函数传递给装饰器时超时?
我正在开发一个python AWS Lambda函数,它使用pydantic执行输入验证。我最近发现Lambda在执行以下代码时超时(超时15秒):Python 为什么AWS Lambda在将函数传递给装饰器时超时?,python,amazon-web-services,aws-lambda,python-decorators,pydantic,Python,Amazon Web Services,Aws Lambda,Python Decorators,Pydantic,我正在开发一个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) 我已经发现,调用
def _stringify(v):
return str(v)
class SomeModel(BaseModel):
a: int
_stringify = validator("a", allow_reuse=True)(_stringify)
SomeModel(a=12)
我已经发现,调用\u stringify=validator(“a”,allow\u reuse=True)(\u stringify)
将\u stringify函数传递给验证器装饰器时会出现问题。这在本地环境中完全起作用,但在AWS Lambda中不起作用。以下“SomeModel”的替代定义也适用于AWS Lambda环境
class SomeModel(BaseModel):
a: int
@validator("a")
def stringify(cls, v):
return str(v)
对AWS Lambda有更好理解的人是否有任何想法,为什么\u stringify=validator(“a”,allow\u reuse=True)(\u stringify)
会导致超时,您能否建议任何可能的修复方案
(注意:SomeModel的替代定义是不可取的,因为它违反了DRY原则,因为我们希望在多个模型中使用_stringify。)
在本地和Lambda环境中运行时,代码不会引发异常
class SomeModel(BaseModel):
a: int
@validator("a")
def stringify(cls, v):
return str(v)
环境:AWS Lambda
Python3.8-通过docker定制运行时构建。Lambda层支持:
- pydantic-v1.6.1(python 3.8)
通过我们的步骤#3,您将无法使用第三方库在本地运行需要多长时间?是否有例外?工作版本相当于在普通函数定义之后编写
stringify=validator(“a”)(stringify)
。非工作版本基本上只是等号后面的部分-您实际上没有定义任何东西,SomeModel
不受代码行的任何影响。本地运行@Parsifal需要1.4微秒。我尝试了您的建议@jasonharper,但没有解决问题。很好的提示:)。我已经编辑了代码来修复@jasonharper.Hi注意到的错误!我们正在运行一个使用docker构建的自定义运行时,以支持python 3.8和其他依赖项。我会更新帖子,让它更明确。