微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

异步执行的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。。对于DryRun调用类型,状态码将为204。

[…]

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

有效载荷

它是Lambda函数返回的对象的JSON表示形式。

解决方法

所以我正在使用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”,则一切正常,并且可以打印响应变量,但这是同步的。我错过了一些简单的事情吗?当异步调用返回时,我如何执行一些代码,例如打印结果?

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。