gpt4 book ai didi

python - 您可以在Lambda Python 3.6中使用异步处理程序吗?

转载 作者:行者123 更新时间:2023-12-03 16:02:53 26 4
gpt4 key购买 nike

我之前做过Lambda函数,但在Python中没有。我知道Javascript中的Lambda支持异步处理程序函数,但是如果我在Python中尝试该函数,则会出现错误。

这是我要测试的代码:

async def handler(event, context):
print(str(event))
return {
'message' : 'OK'
}

这是我得到的错误:
An error occurred during JSON serialization of response: <coroutine object handler at 0x7f63a2d20308> is not JSON serializable
Traceback (most recent call last):
File "/var/lang/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/var/lang/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/var/lang/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/var/runtime/awslambda/bootstrap.py", line 149, in decimal_serializer
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <coroutine object handler at 0x7f63a2d20308> is not JSON serializable

/var/runtime/awslambda/bootstrap.py:312: RuntimeWarning: coroutine 'handler' was never awaited
errortype, result, fatal = report_fault(invokeid, e)

最佳答案

一点也不。 AWS Lambda不支持异步Python处理函数

如果需要在AWS Lambda中使用async/await功能,则必须在代码中定义异步函数(在Lambda文件或Lambda层中),然后在同步处理程序中调用asyncio.get_event_loop().run_until_complete(your_async_handler())

请注意,asyncio.run(introduced in Python 3.7)是,不是在AWS Lambda执行环境中调用异步处理程序的正确方法,因为Lambda tries to reuse是后续调用的执行上下文。这里的问题是asyncio.run创建了一个新的EventLoop并关闭了前一个。如果您从先前的Lambda调用中打开了任何资源或创建了与关闭的EventLoop关联的协程,则将显示“事件循环关闭”错误。 asyncio.get_event_loop().run_until_complete允许您重用相同的循环。请参阅相关的StackOverflow question

AWS Lambda文档通过引入同步和异步调用来误导读者。请勿将其与同步/异步Python函数混淆。 Synchronous是指调用AWS Lambda并进一步等待结果(阻止操作)。该函数将立即被调用,您将尽快获得响应。而使用asynchronous调用则要求Lambda安排函数执行时间,而根本不等待响应。时间到了,Lambda仍将同步调用处理程序函数。

关于python - 您可以在Lambda Python 3.6中使用异步处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60455830/

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