Aws Lambda With Python Asyncio. Event Loop Closed Problem?
Solution 1:
Python 3.7+
You can use the higher level asyncio.run()
that will take care of things.
defhandler(event, context):
asyncio.run(main())
asyncdefmain():
# your async code here
This will close the loop at the end and open a new one when running lambda again. .run()
is also recommended by asyncio maintainers.
Solution 2:
After all lambda is supposed to be stateless
Your function is supposed to be stateless.
From https://aws.amazon.com/lambda/faqs/:
Q: What is an AWS Lambda function?
...
The code must be written in a “stateless” style i.e. it should assume there is no affinity to the underlying compute infrastructure.
...
Q: Will AWS Lambda reuse function instances?
To improve performance, AWS Lambda may choose to retain an instance of your function and reuse it to serve a subsequent request, rather than creating a new copy. To learn more about how Lambda reuses function instances, visit our documentation. Your code should not assume that this will always happen.
The current python instance is reused for performance reasons, but its reuse or non-reuse must never be relied on. So while AWS Lambda is not itself always stateless, your programming methodology should be. Hopefully that clears up your confusion as to why that is happening!
Solution 3:
Add this line of the top of the code,
asyncio.set_event_loop(asyncio.new_event_loop())
so that it is global.
Alternatively,
Replace,
loop = asyncio.get_event_loop()
with,
loop = asyncio.new_event_loop()
It is happening since you already closed the loop.
That should work.
Post a Comment for "Aws Lambda With Python Asyncio. Event Loop Closed Problem?"