[英]What is the correct way to write asyncio code for use with AWS Lambda?
我寫了以下代碼:
import asyncio
loop = asyncio.get_event_loop()
async def get_urls(event):
return {'msg':'Hello World'}
def lambda_handler(event,context):
return loop.run_until_complete(get_urls(event))
我試圖完成以下但速度更快。
def lambda_handler(event, context):
# TODO implement
return {'msg':'Hello World'}
在 AWS Lambda 環境中編寫此代碼的正確方法是什么?
異步執行同時做很多事情。 你只是在做一件事。 你做一件事的速度不能超過做一件事所花費的時間。 異步執行允許您執行通常會同時(同步)一個接一個地執行的獨立任務,然后返回所有任務的結果。 本質上,您必須執行多個操作。
對於 Python 3.7+,您可以使用asyncio.run()
來執行協程:
import asyncio
# The AWS Lambda handler
def handler(event, context):
asyncio.run(main())
async def main():
# Here you can await any awaitable
await asyncio.sleep(1)
await asyncio.gather([coroutine_1, coroutine_2])
以下是如何在 AWS Lambda 上使用 asyncio、aiohttp 和 aiobotocore 開發、測試和部署異步 Python 函數的完整示例: https ://github.com/geeogi/async-python-lambda-template
需要在本地安裝 aioboto3 作為部署 zip 包的一部分`
import asyncio
import aioboto3
async def list_s3_objs (bucket):
async with aioboto3.client("s3") as s3_client:
objs = await s3_client.list_objects(Bucket=bucket)
return objs['Contents']
def lambda_handler(event, context):
loop = asyncio.get_event_loop()
loop.run_until_complete(list_s3_objs('bucket_name'))
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.