当前位置: 首页 > 面试题库 >

使用boto调用lambda函数如何异步执行此操作?

苏健柏
2023-03-14
问题内容

所以我正在使用boto调用我的lambda函数并测试我的后端。我想异步调用它们。我注意到“
invoke_async”已被弃用,不应使用。相反,您应该将InvocationType与“
Event”的InvocationType一起使用以异步执行该功能。

但是,我似乎无法弄清楚如何从函数中获取响应。我尝试了以下方法

payload3=b"""{
"latitude": 39.5732160891,
"longitude": -119.672918997,
"radius": 100
}"""

client = boto3.client('lambda')
for x in range (0, 5):
    response = client.invoke(
        FunctionName="loadSpotsAroundPoint",
        InvocationType='Event',
        Payload=payload3
    )
    time.sleep(15)
    print(json.loads(response['Payload'].read()))
    print("\n")

即使我告诉代码休眠15秒钟,当我尝试打印它时,响应变量仍然为空。如果我将Invokation InvokationType更改为“
RequestResponse”,则一切正常,并且可以打印响应变量,但这是同步的。我错过了一些简单的事情吗?当异步调用返回时,我如何执行一些代码,例如打印结果?

谢谢。


问题答案:

异步执行的AWS Lambda函数不会返回执行结果。如果异步调用请求成功(即,没有由于权限等导致的错误),AWS
Lambda将立即返回HTTP状态代码202
ACCEPTED,并且不承担与传递有关此异步调用结果的任何信息的进一步责任。

从AWS Lambda
Invoke操作的文档中:

HTTP/1.1 StatusCode
X-Amz-Function-Error: FunctionError
X-Amz-Log-Result: LogResult

Payload

响应元素

如果操作成功,该服务将发回以下HTTP响应。

状态码

HTTP状态代码的成功范围将在200范围内。对于RequestResponse调用类型,此状态代码将为200。
对于Event调用类型,此状态代码将为202。对于DryRun调用类型,状态码将为204。

[…]

响应返回以下内容作为HTTP正文。

有效载荷

它是Lambda函数返回的对象的JSON表示形式。 仅当调用类型为时才存在RequestResponse



 类似资料:
  • 好了,我说完了。请有人帮帮我:( 我不知道js和lambda是怎么工作的 null 最令人困惑的是!这个b给我这个测试结果: 运行1: DynamoDb是空的,这里我们看不到DynamoDb.BatchWriteItem结果的日志。

  • 我有一个由S3推送事件触发的AWS Lambda。lambda将调用一个API,这将触发一个长时间运行的进程。我认识到我可以配置S3异步调用lambda函数,因此S3不会等待响应,但我很想知道我是否可以配置lambda异步调用我的API。我不希望lambda在过程完成时等待几分钟。有人能给我指出一些概述这个过程的留档吗?提前谢谢。

  • 问题内容: 在我的NodeJS代码中,我需要进行2或3个API调用,每个调用都会返回一些数据。在完成所有API调用之后,我想将所有数据收集到单个JSON对象中以发送到前端。 我知道如何使用API​​回调(下一个调用将在上一个调用的回调中发生)执行此操作,但这会很慢: 我知道您也可以通过promise做一些类似的事情,但我认为相同的概念适用于下一个调用要等到当前调用完成后才能执行的情况。 有没有一种

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调

  • 我如何获得API调用以返回答案(在本例中是数字70)? 我已经看过了AWS文档和AWS API网关的步骤函数,但是我还是不清楚。 如何创建一个新的lambda函数(或使用上面两个函数中的任何一个)来调用/执行这个step函数来返回答案? 还有其他方法可以通过API调用返回步骤函数的答案吗? 附注:我想使用step函数部署我的机器学习模型,这只是我尝试的一个简单测试。