gpt4 book ai didi

python - 为什么 AWS Lambda 在将函数传递给装饰器时会超时?

转载 作者:行者123 更新时间:2023-12-05 06:12:59 24 4
gpt4 key购买 nike

我正在研究一个 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)

对于 _stringify = validator("a", allow_reuse=True)(_stringify) 导致超时的原因,对 AWS Lambda 有更好了解的人是否有任何想法,您能否提出任何可能的建议修复?

(注意:SomeModel 的替代定义是不可取的,因为它违反了 DRY 原则,因为我们想在多个模型中使用 _stringify。)

代码在本地和 Lambda 环境中运行时都不会引发异常。

环境:
AWS lambda
python 3.8 - 通过 docker 自定义运行时构建。 Lambda 层支持:

  • pydantic - v1.6.1 (python 3.8)

最佳答案

Environment:python 3.8

AWS Lambda 不支持 Python 3.8,除非您使用自己的自定义运行时 (https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)。

您需要进行后续步骤:

  1. 检查您的代码在 Python 3.7 下是否正常运行
  2. 检查您的 Lambda 设置并确保它设置为使用 Python 3.7
  3. 准备一个包含所有第三方依赖项(pydantic 等)的 zip 文件,并将其上传到 AWS Lambda 的配置网页或在 Lambda 的部署过程中在脚本中使用它:https://docs.aws.amazon.com/lambda/latest/dg/python-package.html .不要忘记为此步骤使用 Python3.7 和合适的 Linux 发行版。最好使用 CentOS(或适当的 Windows Linux 子系统 (WSL) 包)。但是 Ubuntu 18.04(和适当的 WSL 包)大部分时间都可以正常工作。如果您遇到某些第三方 python 包的问题,​​请从 pypi.org 下载适当的通用 linux 兼容 .whl 文件,并将此 .whl 文件添加到生成的包含第三方依赖项的 .zip 文件中。

通过我们的第 3 步,您将无法使用第三方库

关于python - 为什么 AWS Lambda 在将函数传递给装饰器时会超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63449884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com