python-3.x - 无服务器框架 : Invoke local python function is slow to respond

标签 python-3.x serverless-framework

尝试使用以下方法在本地运行我的无服务器 python lambda 函数:

serverless invoke local -f hello



该函数运行,但在调用处理程序之前似乎需要 2-5 秒。这对我来说是一个真正的问题,因为我希望使用 invoke支持本地测试。

我的处理程序非常简单:
def hello(event, context):
   print('start')
   body = {
      "message": "Go Serverless v1.0! Your function executed successfully!",
      "input": event
   }

   response = {
      "statusCode": 200,
     "body": json.dumps(body)
   }
   print('end')

   return response

大致时间:
  • 调用 invokeprint(start) : 2-5s
  • print(start)print(end) : <0.5s
  • print(end)响应返回终端:1s

  • 由于我找不到其他有此问题的人,因此建议它与我的本地机器有关。不知道它可能是什么,甚至不知道从哪里开始查找故障。

    无服务器:1.32(全局安装)
    python :3.6.5

    最佳答案

    这是无服务器框架的问题(遗憾的是 AWS SAM 框架),而不是您的代码。不幸的是,Node.JS 和 Go 本地调用遇到了同样的问题。

    问题的根源不是代码的执行,而是每次调用时都需要重新配置执行环境的事实,而所需的时间取决于机器。

    调用的一种替代方法是,正如我所做的那样,在您的 lambda 处理程序上编写一个 API HTTP Server 包装器。在本地环境中,您可以使用包装器启动服务器并继续测试。

    编辑:

    这基本上是您创建包装器所需要做的:

  • 从您的包装器启动您的 HTTP 服务器。
  • 创建一个函数,将服务器上的请求转换为 Lambda 请求,并将从 lambda 处理程序返回的响应转换为 HTTP 服务器响应。
  • 在您的包装器上,创建与 serverless.yml 中提到的路径相对应的路径端点。 .使用在步骤 2 中创建的函数将请求转发到您的处理程序。
  • 从您的处理程序收到返回的结果后,将其映射到您的 HTTP 服务器响应并将其作为响应发送给用户。
  • 关于python-3.x - 无服务器框架 : Invoke local python function is slow to respond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914527/

    相关文章:

    python-3.x - 如何改进我的错误处理,以便正确处理 Tweepy 中的异常 StopIteration 并且可以继续执行?

    serverless-framework - 如何在 serverless.ts 文件中设置 provider.apiGateway.shouldStartNameWithService?

    aws-cloudformation - 如何从 CloudFormation 调试 's3:CreateBucket Access Denied'

    amazon-web-services - 如何在无服务器中使用 Sub 函数和 GetAtt?

    serverless-framework - 打包无服务器时如何包含文件夹但排除该文件夹内的某些文件?

    python - 为什么collections.deque的rotate()方法具有线性时间复杂度?

    python - 如何获取dataframe的值?

    python - Django Rest Framework 如何禁止用户更改用户名?

    python 3.2.1 : Incorrectly reading from text file

    amazon-web-services - 如何在CloudWatch中将值传递给Lambda函数?